【问题标题】:EOF character is not detected when typing line of text first?首先键入文本行时未检测到 EOF 字符?
【发布时间】:2014-03-26 17:17:06
【问题描述】:
char ch;
while((ch=getc(stdin))!=EOF)
{
    putc(ch,stdout);
}

我们知道ctrl-z可以输入EOF字符。

我运行了两次程序:-

1- 当我输入ctrl-z 时,循环终止,这是可以接受的。

2- 当我输入ctrl-z 以及其他一些文本(如demo)然后按ctrl-z 时,循环不会终止。

所以我的问题是,为什么仅通过单独输入 ctrl-z 才能终止循环?

【问题讨论】:

  • 正在使用哪个终端/shell?
  • @user2864740:什么意思?
  • 即xterm/bash? windows/cmd.exe?
  • 我用过第二个

标签: c input eof getc


【解决方案1】:

EOF不是可以放入流中的字符。它是一个元控制字符,可以被getc 返回,但不能写入。从技术上讲,ctrl-z 并不发送 EOF,它会将 SIGTSTP 发送到进程,并且 getc 被编程为通过返回 EOF 来响应它。

【讨论】:

  • 我同意,但为什么在第二种情况下没有发生这种情况
  • 您是在输入demo,然后按ctrl-z,还是输入^z?后者不适用于大多数终端。
  • 我正在输入demo,然后按ctrl-z
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多