#include<stdio.h>
int main()
{
char a, b;
scanf("%c", &a);
scanf("%c", &b);
printf("%c %c",a,b);
return 0;
}
当我运行这个程序时,我只得到输出作为&amp;我没有得到输入第二个字符的提示。为什么呢?
答案 0 :(得分:11)
在这一行中,
scanf("%c", &a);
你实际上从stdin(标准输入)获取%d但是当你从stdin输入一个字符时,你也从键盘输入了ENTER,这意味着你现在在stdin中有两个字符;角色本身&amp; \ n。因此,该程序将第一个字符设为the one you entered
&amp;第二个字符为\n
。
您需要使用
scanf("%c\n", &a);
以便scanf 吃换行符(也可以按ENTER键)。
如rodrigo所述,您也可以使用这些。
scanf(" %c", &a); or scanf("%c ", &a);
您认为打印第二个字符的方式是错误的。它实际上正在打印,但它是\ n所以你的提示可能会进入下一行。
如果您在不使用ENTER的情况下输入两个字符,您的代码将会起作用。
shadyabhi@archlinux /tmp $ ./a.out
qw
q wshadyabhi@archlinux /tmp $
注意,当你使用它时,STDIN中唯一的东西就是q&amp; W上。所以,第一次扫描q
&amp;第二个w
。
答案 1 :(得分:2)
因为当您按下enter
键时,生成的换行符将作为单独的字符读入b
。试试这个:
#include<stdio.h>
int main()
{
char a, b;
scanf("%c %c", &a, &b);
printf("%c %c",a,b);
return 0;
}
答案 2 :(得分:0)
%c是一个格式字符串,只接受一个字符。我想你按下字母键后按Enter键。 Enter键也被识别为字符。所以下一个变量是输入值,其值为“\ 0” 计算机仍在从第二个变量打印字符,但由于没有打印任何内容,因此它不可见。如果你敏锐地观察,会有一个新的线 一个接一个地输入两个字符,您将获得正确的输出。