我尝试运行以下程序:
int main(){
char a;
char b;
char c;
printf("\nenter a: ");
scanf("%c", &a);
printf("\nenter b: ");
scanf("%c", &b);
printf("\nenter c: ");
scanf("%c", &c);
return 0;
}
运行程序时,它会提示您输入a的值。执行此操作后,系统会提示您输入b的值,但是不允许输入值,因为程序会跳过扫描,然后再次提示您输入未跳过的c值。我可以初始化a和c,但不是b。而且我不知道为什么。我读过在scanf中使用%[^ \ n]的地方,但我尝试使用它,我不认为我正确使用它,因为它仍然无法正常工作。
这是输出(带有一些输入示例):
enter a: 1
enter b:
enter c: 1
process returned 0 (0x0)
答案 0 :(得分:0)
而不是"%c"
,请使用" %c"
。
如果没有空格,当格式说明符为%c
时,scanf不会跳过空格。这最初会引起混淆,因为它会跳过其他格式说明符的空格,例如%d
,%f
,%s
等。
答案 1 :(得分:0)
当您按输入时,会在输入队列中添加一个字符,然后将其读入b
。
你可以显式读取一个字符来忽略它,或者你可以使用(作为一种选择)%1s
来读取单字符字符串(它将跳过空格,包括输入的换行符)按时输入。
答案 2 :(得分:0)
'\n'
后, b
成为变量enter
的输入。
为了解决这个问题,请使用getchar()
来处理'\n'
。
int main(){
char a;
char b;
char c;
printf("\nenter a: ");
scanf("%c", &a);
getchar();
printf("\nenter b: ");
scanf("%c", &b);
getchar();
printf("\nenter c: ");
scanf("%c", &c);
return 0;
}