Given the input "Go west, young man!", what would each of the following programs produce for output? (The ! follows the space character in the ASCII sequence.)
#include <stdio.h>
int main(void)
{
char ch;
scanf("%c", &ch);
while ( ch != 'g' )
{
printf("%c", ch);
scanf("%c", &ch);
}
return 0;
}
这是c primer plus 5th 上的一个题,当我输入“Go west, young man!”后按回车,输出“Go west, youn”,我的问题不是为何不输出其后的“g man!”,而是为何在输入了所有的字符后按回车却显示了所有的字符(除了后面几个)。
我的理解是,当我输入G后再输入o时,scanf()将G发送给ch,而将o流到下一次的scanf(),简单的比喻一下就是scanf()将o当成了回车,将o前面的G发给ch。为了验证我的想法我有写了下面的程序:
#include <stdio.h>
#include<conio.h>
int main()
{
char ch1,ch2;
scanf("%c",&ch1);
scanf("%c",&ch2);
printf("%c %c",ch1,ch2);
getch();
return 0;
}
输入ab 回车
输出a b
望大家看看我是否理解的正确