while循环为什么会舍弃换行符

img


红色框的那里,书上说可以丢弃scanf()输入后的所有字符(包括换行符),换行符为什么可以丢弃,不是到了\n时就相等了吗,不是就不会进入这个while循环,我感觉不会舍弃吧

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;
}

img

每次调用getchar()都会从输入流中提取一个字符。因此最里面的while循环一直从输入流中提取字符指定提取的字符是'\n'才结束循环,注意循环结束时\n已经从输入流中被提取了,然后外层循环调用getchar()提取的是'\n'之后的字符。