为什么不能用while ((tem = getchar()) != EOF)清除缓存

为什么不能用while ((tem = getchar()) != EOF)清除缓存,输入以后回车只能一直换行,跳不出循环
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h> 
int main()
{
    char ch[20];
    printf("Please enter the password.");
    scanf("%s", ch);
    int tem;
    while ((tem = getchar()) != EOF)//出错
        ;
    printf("Please confirm the password  Y/N");
    char i = getchar();
    if (i == 'Y')
    {
        printf("Success");
    }
    else
        printf("Fail");

    return 0;
}

运行结果

img

用这个却可以

while ((tem = getchar()) != '\n' && tem != EOF);
        ;

因为getchar()函数遇到换行符就会终止导致的,然后EOF是文件的结尾,你的输入是不可能让条件为假的,所以得添加不为换行符的条件使得循环能够终止

所以根本原因就是你根本不理解什么叫EOF,它到底是个什么字符,就胡乱的拿来用。
EOF是文件结尾,类似\0这种字符串结束符一样的东西,凡是你能打出来的字,它就不可能是个\0呀。