使用 getch() 进行标准输入时输入 EOF 表示法
Posted
技术标签:
【中文标题】使用 getch() 进行标准输入时输入 EOF 表示法【英文标题】:Inputting EOF notation when using getch() for standard input 【发布时间】:2014-11-13 08:17:22 【问题描述】:这是我程序的一个片段
#include<stdio.h>
#include<conio.h>
int main(void)
int c;
while ((c = getch()) != EOF)
if (c == '\t')
putchar('\\');
putchar('t');
else if (c == '\b')
putchar('\\');
putchar('b');
else if (c == '\\')
putchar('\\');
putchar('\\');
else if (c == '\r')
puts("\\n");
// putchar('\n');
else
putchar(c);
return 0;
我想在输入 EOF 时终止我的输入,但是当我输入 ^Z 时,我只得到这个: 那么如何输入 ^Z 来终止我的输入呢?
【问题讨论】:
c
的类型是什么?应该是int
。如果是char
,则永远不可能是EOF
。
@MikeSeymour 代码无关紧要并且是多余的,问题更多的是关于 CMD 终端而不是有问题的程序。它实际上更适合 SuperUser.com
找到相关的东西(我猜是(-;):***.com/questions/7373386/…
你可以试试ctrl+D
@sashoalm:除非问题是 c
是错误的类型,这是所描述症状的可能原因之一。
【参考方案1】:
您的程序运行良好......但getch
并没有完全按照您的预期运行。
getch
(来自 conio.h)和getchar
(来自 stdio.h)都一次获得一个字符,但不在同一级别。 getchar
级别更高,所以:
Ctrl-C
中断(更确切地说,Ctrl-C
被视为 SIG_INT 信号)
将 Unix-Linux 上的特殊字符 Ctrl-D
转换为 Windows 上的 Ctrl-Z
为 EOF
另一方面,getch
是低级的(存在于 Microsoft 系统中,但不是标准 C):
Ctrl-C
和Ctrl-Z
在内的任何字符
唯一可能的中断是通过Ctrl-Break
从不返回 EOF (== -1)
所有使用getch
的例子都是一样的:你定义你输入字符的结尾并手动测试它,没有神奇的EOF。
【讨论】:
以上是关于使用 getch() 进行标准输入时输入 EOF 表示法的主要内容,如果未能解决你的问题,请参考以下文章