我正在运行C程序设计语言书中的以下程序:
#include <stdio.h>
main()
{
int c;
while((c=getchar()) != EOF)
putchar();
}或
#include<stdio.h>
int main(){
int c = getchar();
while(c != EOF){
putchar(c);
c = getchar();
}
}当我运行这个程序时,我会有一种无法解释的行为。如果我按照以下顺序从命令行输入字符:{'h', 'e', 'l', 'l', 'o', '\n', '^D'},则会得到以下响应:hello,在输入\n之后,程序在输入^D后退出。
但是,当我将顺序更改为:{'h', 'e', 'l', 'l', 'o', '^D'}时,会得到以下响应,打印到屏幕上:hello,但程序不会退出。一旦我进入^D,它不应该退出吗?我必须第二次进入^D程序才能退出。或者,程序只有在我在\n之后进入\n之后才退出。我不明白为什么无论何时进入^D程序都不退出。有什么想法吗?
我正在UNIX系统上运行。
发布于 2014-11-28 07:41:12
当您输入^D (‘结束传输’)时,输入缓冲区会被刷新,到现在为止您键入的所有内容都会发送到您的程序中(实际上没有发送^D字符)。它类似于输入换行符,但是,在这种情况下,换行符本身也会被发送。当程序读取零字符时,它认为它的输入是关闭的。当您键入换行符后加上^D或连续两个^D时,就会发生这种情况。
https://stackoverflow.com/questions/27183865
复制相似问题