【C语言】关于while ((ch = getchar()) != EOF && ch != '\n')

请问下这个语句在这段代码中的作用是什么

int read_col_num(int col[ ], int max) {
int num = 0;
int ch;
while (num < max && scanf("%d", &col[num]) == 1 && col[num] >= 0)
num++;

if (num % 2 != 0) {
    puts("输入的纵列不成对");
    exit(EXIT_FAILURE);
}

while ((ch = getchar()) != EOF && ch != '\n') /* 没有弄清楚这个while意思 2022/12/23 */
    ;

return num;

}

通过测试打印ch的值发现,应该是读走缓冲区的多余的输入,直到换行符结束的作用,测试代码如下:

参考链接:

#include <stdio.h>
#include <stdlib.h>

int read_col_num(int col[ ], int max) {
int num = 0;
int ch;
while (num < max && scanf("%d", &col[num]) == 1 && col[num] >= 0)
num++;

if (num % 2 != 0) {
    puts("输入的纵列不成对");
    exit(EXIT_FAILURE);
}

while ((ch = getchar()) != EOF && ch != '\n'){
    printf("in while,ch=%c,ch=%d\n",ch,ch);
}
printf("out while, ch=%d\n",ch);

return num;
}


int main(void){
    
    int col[20];
    int num = read_col_num(col,8);
    printf("num=%d\n",num);
    
    return  0;
}

img