为什么我的for循环不接受9个输入?

时间:2013-08-28 08:05:38

标签: c loops for-loop

我的代码只需要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;
}

我该如何纠正?

5 个答案:

答案 0 :(得分:8)

更改

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

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

注意当你按下回车键时,在说明符之前给出的空间在stdin缓冲区中消耗\n

每个\n都可以作为输入从输入空间中获取空间。

答案 1 :(得分:3)

它应该有效,但请注意%c只会读取一个字符。对于其他(更“高级”)格式说明符,空格不会被抑制,因此如果您将字符与任何类型的空格分开,则将读取这些空格而不是实际字符。

另请注意,您应该检查scanf()的返回值,如果没有合适的输入则可能会失败。

答案 2 :(得分:1)

第一个输入存储在arr [0] [0]中,然后当你按下回车键(返回键)时,它存储在arr [0] [1]中,当你认为你正在输入第二个字符时,你实际上是在给第三个输入。尝试下面的代码,看看你是否没有得到它。

#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

希望它能回答你的问题

答案 3 :(得分:0)

相反,您可以使用gets(arr[i][j])

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

这将完美地运作。最好使用gets() and puts()函数代替printf()scanf()函数来表示C中的字符串和字符

答案 4 :(得分:-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);
    }
}