当输入不是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''
我想知道操作系统是否重要,因为我在OS X10.10
下,并且据说 \r
在OS X下开始新行而不是\n
< /强>
另外,我不确定调试器是否重要,因为我使用Xcode
来运行程序。
** Ctrl-D
将终止程序并在输入后立即显示输出。
但是Enter
会输出当前的stdin
,然后等待新的输入。
到目前为止,我还没有任何其他想法。
答案 0 :(得分:1)
按Enter键不会终止你的程序,它会在输入流中添加一个新行,它不会添加一个EOF,取决于你所在的shell,你可以使用Ctrl-D来标记stdin的EOF并终止你的计划。
标准流是行缓冲的,行缓冲流的行为由标准定义如下:
当流被缓冲时,字符应该是 当换行字符时,作为块发送到主机环境或从主机环境发送 遇到。此外,字符旨在作为块传输到主机 填充缓冲区时,在无缓冲流上请求输入时的环境,或 当在需要传输的线路缓冲流上请求输入时 主机环境中的字符。