2016-09-21 8 views
-4

"charデータ型の値"を配列に格納したいが、動作しない。"char values"を配列に格納したい(C言語で)

まず、「gets」を使用してみました しかし、実行時エラーが発生しました。 コードは一つだけ、私は「scanf関数」を使用していたが、私は保存することができませんでした「charデータ型は、(それは文字列のような複数の文字でなければなりません)」、第二の方法では、この

int tmp = 0; 


    char arr[100] = { 0, }; 
    while (arr[tmp]!=NULL) 
    { 
     gets(arr[tmp]); 
     tmp++; 
    } 
    for (int rtmp = 0; rtmp < a; rtmp++) 
    printf("%s ", arr[rtmp]); 
    return 0; 

のようだったが、 (%sを試しましたが動作しません) さらに、arrayの最後の値は表示されません。

int a = 0; 
scanf("%d", &a); //determine how much I input values 

int tmp = 0; 
char arr[100] ={ 0 , }; 
for(tmp=0;tmp<a;tmp++) 
{ 
    scanf("%c ",arr[tmp]); 
    fflush(stdin); 
} 
for (int rtmp = 0; rtmp < a; rtmp++) 
    printf("%c ", arr[rtmp]); 
return 0; 

私にとって最も「同一」は、「」値(「」どのくらいの値I入力を意味する) と配列の「char値」を記憶に通知することなく ..です

どのようにすることができます私はこの問題を解決する? ありがとうございます!あなたの助けは常に高く評価されています:)

+5

'のscanf( "%cの"、ARR [TMP]);' - > 'のscanf( "%cの"、&編曲:[TMP]);' – BLUEPIXY

+1

を最初のケースでは、あなたを'char'の配列を持っていますが、*要素*を' char'配列(ポインタ)として扱おうとします。 –

+2

'fflush(stdin);'は未定義の動作を呼び出します。入力ストリームをフラッシュすることはできません。 – Olaf

答えて

1

文字データ型の配列はスティングと呼ばれます。 scanf()とgets()を使って文字列の入力を受け取ることができます。しかし、scanf()を使うと、Space-barかEnterを押すと文字列が入力されます。しかし、gets()を使うと、Enterキーを押すだけで入力が与えられます。

例1:

char s[100]; 
scanf("%s", s); 

例2:あなたは、すべて単一の文字個別に入力する場合は

char s[100]; 
gets(s); 

さて、あなたはそれも行うことができます。

char s[100], c; 
    int n, i, j; 
    scanf("%d", &n); 
    getchar(); 
    for(i=0; i<n; i++) { 
     scanf("%c", &s[i]); 
    } 

    s[i] = '\0'; 

今私がscanf("%d", &n);の後にgetchar()と書いたのは、inpuの後にEnterを押すとnの隣の文字に改行文字( '\ n')も入力されます。このような場合には、これを行う必要があります。

さらにもう1つは、scanf()を使用してスペースを含む文字列を入力することです。ただ、この操作を行います。

char s[100]; 
scanf("%[^\n]", s); 
関連する問題