c - 为什么按Enter键会触发getchar()终止?

时间:2016-04-16 10:22:53

标签: c

输入不是EOF时,getchat()应该能够在按Enter键时识别\n

在C文件中:

返回值 The obtained character on success or EOF on failure.

然而,当我跑

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    int c, q = 1;
    while ((c = getchar()) != EOF) {
        if (c == '"') {
            printf("%s", q ? "``" : "''");
            q = !q;
        }else{
            printf("%c", c);
        }
    }
    return 0;
}

显示输出但程序没有终止,它正在等待更多输入。

  

这是&#34;引用&#34; 输入

输出:This is ``quote''

press Enter

我想知道操作系统是否重要,因为我在OS X10.10下,并且据说 \r在OS X下开始新行而不是\n < /强>

另外,我不确定调试器是否重要,因为我使用Xcode来运行程序。

** Ctrl-D将终止程序并在输入后立即显示输出。

但是Enter会输出当前的stdin,然后等待新的输入。

到目前为止,我还没有任何其他想法。

1 个答案:

答案 0 :(得分:1)

按Enter键不会终止你的程序,它会在输入流中添加一个新行,它不会添加一个EOF,取决于你所在的shell,你可以使用Ctrl-D来标记stdin的EOF并终止你的计划。

标准流是行缓冲的,行缓冲流的行为由标准定义如下:

  

当流被缓冲时,字符应该是       当换行字符时,作为块发送到主机环境或从主机环境发送       遇到。此外,字符旨在作为块传输到主机       填充缓冲区时,在无缓冲流上请求输入时的环境,或       当在需要传输的线路缓冲流上请求输入时       主机环境中的字符。