/* C89 */
#include<stdio.h>
int main(void){
int c;
printf("Print any not EOF char: ");
c = getchar(); /* I put a char and press
the ENTER key here.*/
printf("int value: %d\n", c);
printf("Now print the EOF char \n(Ctrl + Z for Windows, "
"or Ctrl + D for Linux): ");
c = getchar();
EOF == c ? printf("You did it! int value: %d\n", c) :
printf("It is not EOF char!\n");
return 0;
}
当我按下&#39; a&#39;键,然后按ENTER,我得到这个: 输出:
打印任何非EOF字符:int值:97现在打印EOF字符(Ctrl + Z for Windows,或Ctrl + D for Linux):它不是EOF char!
因此,在第二次调用getchar()时,我没有问过char。为什么呢?
如果我按下&#39; a&#39; char和CTRL + Z(我使用Windows操作系统),我得到这个: 输出:
打印任何非EOF字符:a ^ Z int值:97现在打印EOF字符(Ctrl + Z for Windows,或Ctrl + D for Linux):它不是EOF char!
但是Ctrl + Z是Windows操作系统的EOF。为什么会这样?
如果我修改我的代码:
/* C89 */
#include<stdio.h>
int main(void){
int c;
printf("Print any not EOF char: ");
c = getchar(); /* I put a char and press
the ENTER key here.*/
printf("int value: %d\n", c);
printf("Now print the EOF char \n(Ctrl + Z for Windows, "
"or Ctrl + D for Linux): ");
getchar(); /* Ignore the ENTER key pressed before. */
c = getchar(); /* Now I can to ask next char. */
EOF == c ? printf("You did it! int value: %d\n", c) :
printf("It is not EOF char!\n");
return 0;
}
现在输出是我的预期: 输出:
打印任何非EOF字符:int值:97现在打印EOF字符(Ctrl + Z for Windows,或Ctrl + D for Linux):^ Z你做到了! int值:-1
为什么会这样?即为什么我必须再拨打getchar()
?
答案 0 :(得分:0)
按Enter键可以做两件事:在输入缓冲区的末尾添加一个NewLine字符(ASCII NL,代码10),然后将其刷新,使整个行可用于getchar()
。因此,在按下“a”之后,您还需要按Enter键,以便您的程序可以查看和解释“a”。但是,您必须使用其他getchar()
来跳过输入流中的NL字符。
然而,当您知道下一个请求是什么时,您可以按'a'(输入'a'),CTRL + Z(输入EOF字符)然后按Enter(输入NL并发送3个字符进行处理) - 然后两个字符'a'和EOF可以由两个getchar
s读取。