【发布时间】:2016-12-08 13:20:28
【问题描述】:
我只是想知道为什么我的代码没有注册我的 CTRL+ Z 输入?当我输入 CTRL+ Z 时,它不会以某种方式退出while循环。
但是,当我用 getchar() 函数替换 scanf() 函数时,它突然起作用了!有没有人能帮我解释一下?
#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;
}
【问题讨论】:
-
值得注意的是,Ctrl-Z 是 Windows 上的 EOF 字符。 UNIX / Linux / POSIX 系统都为此使用 Ctrl-D (AFAIK)。
-
注意
grade在while( grade != EOF){第一次执行时没有初始化。 -
开始 1) 值 EOF 是有符号整数,而不是字符。 2) 在调用
scanf()时始终检查返回值,而不是参数值,因为EOF 值不会放在参数中。 3)变量grade在被检查之前没有被初始化。 4) 强烈建议将while()语句写成:while( EOF != scanf( "%c", &grade ) )建议始终阅读/理解所调用的任何系统函数的手册页。