使用 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-CCtrl-Z 在内的任何字符 唯一可能的中断是通过Ctrl-Break 从不返回 EOF (== -1)

所有使用getch 的例子都是一样的:定义你输入字符的结尾并手动测试它,没有神奇的EOF。

【讨论】:

以上是关于使用 getch() 进行标准输入时输入 EOF 表示法的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的getch与getchar 有啥区别?

chars eof啥用

getch() 和 getchar() 有啥区别?

快速输入输出模板

C 库函数 - getchar()

如何在 Windows 上的 Git Bash 终端下向 EOF 发出信号以关闭标准输入? Ctrl-D 不起作用