我的代码只需要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;
}
我该如何纠正?
答案 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);
}
}