使用getch()进行标准输入时输入EOF表示法

时间:2014-11-13 08:17:22

标签: c++ c visual-c++

这是我程序的一个片段

     #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时我只得到这个: enter image description here 那么如何输入^ Z来终止输入?

1 个答案:

答案 0 :(得分:3)

您的程序运作正常......但getch并不能完全符合您的预期。

getch(来自conio.h)和getchar(来自stdio.h)一次只获得一个字符,但不是同一级别。 getchar更高级别,所以:

  • 读取stdin(可以重定向)
  • 以线路导向模式等待完整缓冲区
  • Ctrl-C中断(更准确地说Ctrl-C被视为SIG_INT信号)
  • 在Windows上的Unix-Linux Ctrl-D上翻译特殊字符Ctrl-Z作为EOF

另一方面,getch是低级别的(并且存在于Microsoft系统中但不是标准C):

  • 直接在键盘上阅读
  • 按原样传递任何字符,包括Ctrl-CCtrl-Z
  • 唯一可能的中断是Ctrl-Break
  • 永远不会返回EOF(== -1)

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