我只是想知道为什么我的代码没有注册我的 CTRL + Z 输入?当我输入 CTRL + Z 时,它不会以某种方式退出while循环。
然而,当我用scanf()
函数替换getchar()
函数时,它突然起作用了!有人可以帮助我这个吗?
#include <stdio.h>
#include <stdlib.h>
int main(){
char grade;
while( grade != EOF){
scanf("%c" , &grade);
switch(grade){
case 'a':
printf("you got an a!\n");
break;
case 'b':
printf("you got a b!\n");
break;
case'\n':
break;
default:
printf("error :(\n");
break;
}
}
printf("Hello world!\n");
return 0;
}
答案 0 :(得分:1)
您需要检查scanf()
函数的返回值以获取预期 EOF
。在扫描失败后检查EOF
的参数是错误的,如果参数类型为自动本地且未初始化,则可以调用undefined behavior。
引自man page(强调我的)
如果在第一次成功转换或匹配失败发生之前到达输入结尾,则返回值
EOF
。如果发生读取错误,也会返回EOF
,在这种情况下,将设置流的错误指示符(请参阅ferror(3)),并设置errno
表示错误。
也就是说,char
不足以保存EOF
的值,如果您必须存储scanf()
来电的返回值,请使用int
。