按下ctrl+z键时,getchar函数读入的值
当在控制台运行C程序时,若按下ctrl+z键,getchar
函数读入的内容,因按下ctrl+z键时输入的^Z
位置有关,具体如下:
- 单独一行开头按下ctrl+Z
若是在单独的一行开头就按下ctrl+z,然后回车输入(即该行只显示^Z
),则读到的值就是EOF
- 该行已有内容,再按下ctrl+z
若是在该行已有输入字符,再按下ctrl+z,同时^Z
后面还可以输入其他字符,比如:abc^Zefg
,然后再回车,将内容输入则通过getchar()
读到的字符内容是abc^Z
,其中^Z
是一个无法显示的特殊字符,而不再是EOF
,同时^Z
后面的所有内容,包括最后按下回车输入的不可见的换行符都将被清空,下次getchar
读入的字符将会是键盘重新输入的字符。
测试效果如下:
测试程序代码:
/*
控制台按在ctrl+z:
1.若是在单独的一行开头按下ctrl+z的(即该行只有^Z),则读到的值就是EOF
2.若是在该行已有输入字符,再按下ctrl+z,同时^Z后面还可以输入其他字符,比如: abc^Zefg,然后再回车,将内容输入
则通过getchar()读到的字符内容是abc^Z,其中^Z是一个无法显示的特殊字符,而不再是EOF,同时^Z后面的所有内容,包括最后按下回车输入的
不可见的换行符都将被清空,下次getchar读入的字符将会是键盘重新输入的字符。
*/
void test_EOF(){
int c,next;
while((c=getchar()) != EOF){
printf("c:%c\n", c);
next = getchar();
printf("next:%c\n", next);
if(next == EOF){
printf("next get EOF\n");
}
}
printf("\n=====>end:%c\n", c);
return;
}
void main()
{
test_EOF();
}