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]);.

请注意,当您按下回车键时,说明符之前给定的空间将消耗\n在标准输入缓冲区中。

每个\n都作为输入工作,从输入空间中占用您的空间。

于 2013-08-28T08:11:55.820 回答
3

它应该可以工作,但请注意,它%c只会读取一个字符。空格不会像其他(更“高级”)格式说明符那样被抑制,因此如果您用任何类型的空格分隔字符,则会读取这些字符而不是实际字符。

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

于 2013-08-28T08:09:32.243 回答
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

希望它能回答你的问题

于 2013-08-28T08:48:47.840 回答
0

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

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

这将完美地工作。在 C 中对字符串和字符使用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 回答