如何调用EOF到标准输入

问题描述:

我的程序正在使用while scanf!= EOF从.in文件输入标准输入。如./"file“< file.in问题是,我必须在终端scanf从终端。有没有一种方法可以将EOF调用到stdin,以便文件停止从file.in中扫描,或者可以指定scanf从终端读取而不是文件。因为这是一项大学任务,所以我也被允许使用scanf。这是我的问题的模拟程序。由于如何调用EOF到标准输入

int main() { 
int arr[100]; 
int num; 
int count = 0; 
while(scanf("%d", &arr[count]) != EOF) { 
    count++; 
} 
printf("%d\n", arr[0]); 
scanf("%d", &num); 
printf("%d\n", num); 
} 

**输出为数字的第一个列表的只是数量,和scanf完全与打印张数没有价值被忽略。

+4

https://en.wikipedia.org/wiki/End-of-file linux中的ctrl-d,windows中的ctrl-z – clcto 2014-09-25 16:04:14

+0

你的'while'不符合你的期望。 – edmz 2014-09-25 16:05:08

+0

对不起,我只是一个命令ctrl-d的printf?对不起,我是新手c – Sarc 2014-09-25 16:12:28

scanf()返回读取的字符数。 你需要FEOF()函数,或0

+0

你能解释更多吗? – cpburnz 2014-09-25 16:51:55

+0

如果FILE *为EOF,则函数feof(FILE *)返回非零值。 将您的scanf()更改为feof(),在循环体中添加您的scanf调用。 – 2014-09-25 18:50:25

+0

可能需要将scanf()替换为fscanf() – 2014-09-25 18:56:55

从scanf函数返回比较值要调用/在stdin模拟EOF,按CTRL + Z,如果你在窗口。否则在运行程序时按CTRL + D。

+0

抱歉,但我认为我的问题被扭曲了。 While循环会结束文件“file.in”,但第二个scanf仍然不会从提示中进行扫描 – Sarc 2014-09-25 16:38:32

+0

尝试使用'fclose'在'scanf'之前关闭文件 – 2014-09-25 16:54:57

+0

它仍然不会提示输入 – Sarc 2014-09-25 17:04:13