#include<stdio.h>
int main()
{
char a[10];
for(int i=0; i<5; i++)
{
printf("\nEnter a character: ");
scanf("%c",&a[i]);
}
}
在这个循环中,程序首先正常询问问题。但是在第二个循环中,程序没有给我输入字符的选项,并立即运行第三个循环。
同样,所有偶数迭代都被跳过。
答案 0 :(得分:1)
我同意@Keine
您应该可以通过在%
之前添加空格来获得预期的输出更正后的代码
#include<stdio.h>
int main()
{
char a[10];
for(int i=0; i<5; i++)
{
printf("\nEnter a character: ");
scanf(" %c",&a[i]);
}
}
SOURCE https://gsamaras.wordpress.com/code/caution-when-reading-char-with-scanf-c/
答案 1 :(得分:0)
在输入的末尾有一个换行符来摆脱它。
%c
注意{{1}}
之前的空格答案 2 :(得分:0)
您可能会被输入&#34;返回&#34;一个角色后的关键。 这意味着还向程序提供了换行符。那个程序发生了什么。
为避免这种情况,请使用fgets()和sscanf()。
#include<stdio.h>
int main()
{
int i;
char a[10], buf[10];
for(i=0; i<5; i++)
{
printf("%d) Enter a character: ", i);
fflush(stdout);
fgets(buf, 10, stdin);
sscanf(buf, "%c", &a[i]);
}
for(i=0; i<5; i++)
{
printf("%d) Entered character: %c\n", i, a[i]);
}
}
输出:
0) Enter a character: a
1) Enter a character: b
2) Enter a character: c
3) Enter a character: d
4) Enter a character: e
0) Entered character: a
1) Entered character: b
2) Entered character: c
3) Entered character: d
4) Entered character: e
fflush()在unix中不需要的代码就像系统一样。