4

私のコードは、入力として 5 つの値しか取りません。私は何を間違っていますか?

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char arr[3][3];
    int i,j,n;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%c",&arr[i][j]);
        }
    }
    return 0;
}

どのように修正すればよいですか?

4

5 に答える 5

8

変化する

scanf("%c",&arr[i][j]);

scanf(" %c",&arr[i][j]);.

\nEnter キーを押したときに、指定子の前に指定されたスペースが stdin バッファーに残っていることに注意してください。

それぞれ\nが入力スペースからスペースを取得する入力として機能します。

于 2013-08-28T08:11:55.820 に答える
3

%c動作するはずですが、1文字しか読み取れないことに注意してください。空白は他の (より高度な) 書式指定子のように抑制されないため、文字を何らかの種類の空白で区切ると、実際の文字の代わりに空白が読み取られます。

また、 の戻り値を確認する必要があることにも注意してくださいscanf()。適切な入力が存在しない場合、失敗する可能性があります。

于 2013-08-28T08:09:32.243 に答える
1

最初の入力は arr[0][0] に格納され、Enter (リターン キー) を押すと arr[0][1] に格納され、2 番目の文字を入力していると思っている間に、実際には 3 番目の入力を行っています。 . 以下のコードを試して、取得できないかどうかを確認してください。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char arr[3][3];
    int i,j,n;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
        printf("Input array [%d][%d]",i,j);
            scanf("%c",&arr[i][j]);
        }
    }
}

scanf(" %c",&arr[i][j]);修正に関しては、 %c の前にスペースが必要です\n

それがあなたの質問に答えることを願っています

于 2013-08-28T08:48:47.840 に答える
0

代わりに使用できますgets(arr[i][j])

それ以外のscanf("%c",&arr[i][j]);

これは完全に機能します。C の文字列と文字には、 and関数のgets() and puts()代わりに関数を使用することをお勧めします。printf()scanf()

于 2013-09-02T13:33:31.890 に答える
-2

fflush(stdin) を使用できます

char arr[3][3];
int i,j,n;
for(i=0;i<3;i++)
{
    for(j=0;j<3;j++)
    {
        scanf("%c",&arr[i][j]);
        fflush(stdin);
    }
}
于 2013-08-28T08:44:21.007 に答える