scanf因为是读取整数,输入后面的换行符会丢弃,如果是按字符读取就会一直读取。
while循环的执行是:首先是执行getchar(),如果没遇到换行符就一直读取字符,直到遇到换行符(这时换行符被从输入流读走了),然后while循环结束。
可以用个小例子来测试:
#include <stdio.h>
int main(void){
int a;
scanf("%d",&a);
char ch =getchar();
printf("ch=%d,=%c",ch,ch); //这里的按整数输出是10 ,对应换行符的ASCII码,说明scanf读取整数后还有一个换行符。
return 0;
}
每次调用getchar()
都会从输入流中提取一个字符。因此最里面的while
循环一直从输入流中提取字符指定提取的字符是'\n'
才结束循环,注意循环结束时\n
已经从输入流中被提取了,然后外层循环调用getchar()
提取的是'\n'
之后的字符。