getchar()!= EOF

Nis*_*shi 5 c putchar getchar

我正在从C编程语言书中运行以下程序:

#include <stdio.h>
main()
{
  int c;
  while((c=getchar()) != EOF)
    putchar(); 
}
Run Code Online (Sandbox Code Playgroud)

要么

#include<stdio.h>
int main(){
   int c = getchar();
   while(c != EOF){
      putchar(c);
      c = getchar();
   }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,我得到一个无法解释的行为.如果从在下面的序列中的命令行I输入字符:{'h', 'e', 'l', 'l', 'o', '\n', '^D'}然后我得到打印到屏幕以下响应:hello,之后\n被输入,并且该程序退出一旦^D在输入.

但是,当我按如下方式更改序列时:{'h', 'e', 'l', 'l', 'o', '^D'}然后我将以下响应打印到屏幕:hello,但程序不会退出.我进入后不应该退出^D吗?我必须^D第二次进入该计划才能退出.或者程序仅在我输入^D以下内容后退出\n.我不明白为什么不管我何时进入该计划都不会退出^D.有什么想法吗?

我在UNIX系统上运行.

Mar*_*ian 18

当您键入^ D('传输结束')时,输入缓冲区将被刷新,您输入的所有内容将被发送到您的程序(实际上不会发送^ D字符).它类似于键入换行符,但在这种情况下,也会发送换行符本身.程序在读取零个字符时将其输入视为已关闭.当您键入换行符后跟^ D或连续两个^ D时会发生这种情况.

  • 请注意,这是操作系统输入流的属性,而不是C程序的属性. (3认同)