这是大学实验室的一部分,TA告诉我有错误,但我没有任何线索。当我运行它时,它会询问我第一个char
但是然后运行该程序并且没有在第二个scanf
询问我。
#include <stdio.h>
int main(void) {
char sen, ben;
printf("Type in a character: ");
scanf("%c", &sen);
printf("The key just accepted is %d", sen);
printf("\nType in another character: ");
scanf("%c", &ben);
printf("The key just accepted is %d", ben);
}
答案 0 :(得分:1)
实际上这是C而不是C ++。将其另存为file.c
。
试试这个:
#include <stdio.h>
int main(void) {
char sen, ben;
printf("Type in a character: ");
sen = getchar();
printf("The key just accepted is %d", sen);
printf("\nType in another character: ");
getchar();
ben = getchar();
printf("The key just accepted is %d", ben);
}
说明:输入第一个字符并按Enter键时,输入的ASCII码作为第二个字符。
我建议不要使用scanf
。但是如果你把getchar
放到“拿”输入的话,它会有两种方式。
答案 1 :(得分:1)
在第二个%c
中的scanf
之前添加空格将解决问题。
这样做是因为scanf
在您输入第一个字符后不会使用\n
字符并将其保留在stdin
中。作为Enter键(\n
)也是一个字符,它会被下一个scanf
调用消耗掉。%c
之前的空格将丢弃所有空格,如空格。
使用%c
扫描角色(scanf
)时,请在%c
之前添加一个空格,因为这有助于减少混淆并帮助您。因此,在scanf
和{{1}}中,您都可以添加空格。
答案 2 :(得分:0)
当您按下键然后按Enter键时,您输入了两个键。第一个是所需的密钥,例如a
,第二个是密钥<enter>
,通常写为\n
。因此,您的第二个scanf
会捕获结果\n
。
由于打印出\n
字符并不会导致屏幕上很容易看到的内容,因此看起来您的程序只是跳过第二个scanf
而只打印出来printf的固定部分没有容易看到的值。
解决此问题的一种方法是在要捕获的键之前消耗所有键击。这是通过在角色后接受更多输入来完成的,直到您看到换行符\n
为止。一旦你看到那个角色,那么你下一次阅读。
// flush extra input up the to carriage return
char flush = 0;
while (flush != '\n') {
scanf("%c", &flush);
}
// now read my desired input
scanf("%c", &ben);
答案 3 :(得分:-1)
那是因为没有人接受'\n'
。像这样scanf
致电scanf("%c%*c", &sen)
。 %*c
表示您要省略一个字符,即'\n'
。
顺便说一下,void main()
是允许的。 main
函数不是可执行文件的真正入口点,所以可以这样做。但似乎不是每个人都喜欢它。