在初始迭代之后,printf()
输出每次迭代显示两次。为什么呢?
int main()
{
int ch;
for( ch = ' '; ch != 'q'; ) {
printf("Enter a character: ");
ch = getchar();
}
printf("You entered a q!\n");
return 0;
}
终端输出为:
Enter a character: w
Enter a character: Enter a character: a
Enter a character: Enter a character: q
You entered a q!
答案 0 :(得分:4)
您没有在命令行中输入w
。您输入了w\n
。这是两个角色。
答案 1 :(得分:2)
因为getchar
读取了一个字符而且' \ n'不仅是您输入的字符。
答案 2 :(得分:0)
正如大家已经说过的那样,getchar()
正在消耗换行符('\ n'),这使得你有两次迭代。解决这个问题的方法是:
int main(){
int ch;
for( ch = ' '; ch != 'q'; ) {
printf("Enter a character: ");
ch = getchar();
getchar();
}
printf("You entered a q!\n");
return 0;
}
第二个getchar()
的原因是使用该换行符,因此您不会有同一事物的双倍输出。只有在输入一个字符时才能使用此方法。
答案 3 :(得分:0)
正如评论和之前的答案所述,getchar()
最后没有读取换行符。快速解决方法是在循环结束时添加另一个getchar();
,如下所示:
int main()
{
int ch;
for( ch = ' '; ch != 'q'; ) {
printf("Enter a character: ");
ch = getchar();
getchar();
}
printf("You entered a q!\n");
return 0;
}
如果您想要一个更灵活的解决方案,如果用户输入多个字符,那么请尝试以下方法:
int main()
{
int ch;
for( ch = ' '; ch != 'q'; ) {
printf("Enter a character: ");
ch = getfirstchar();
}
printf("You entered a q!\n");
return 0;
}
int getfirstchar() {
int c = getchar();
while(getchar() != '\n')
;
return c;
}
我将这个角色的阅读变成了一个单独的功能,因此它更适合未来的代码。