【发布时间】:2015-02-27 01:13:09
【问题描述】:
我想使用 EOF 来终止读取批量用户输入,但继续能够接受用户 CLI 输入。
Linux 似乎允许这种行为,但 OS/X 只是简单地关闭了标准输入输入流(如以下测试程序所示)。
是否有任何解决方法允许它在 OS/X 上运行?
在 MAC OS/X 上运行的示例输出。一旦检测到 EOF,就不能进行任何输入。 (以 >>> 开头的行是程序的输出)。
TDWONG-M-V08D:$ ./eof_stdin
>>> fgets: zzz
>>> ans=zzz
>>> read stdin again, fgets:
zzz
>>> ans=zzz
TDWONG-M-V08D:$ ./eof_stdin
>>> fgets: >>> ans=
>>> feof(stdin) is true -- EOF detected
>>> read stdin again, fgets:
>>> ans=
在 Linux 上运行的示例输出。即使在检测到 EOF 之后也接受输入。 (以 >>> 开头的行是程序的输出)。
[tdwong@tdwong-ubuntu tmp]$ ./eof_stdin
>>> fgets: zzz
>>> ans=zzz
>>> read stdin again, fgets:
zzz
>>> ans=zzz
[tdwong@tdwong-ubuntu tmp]$ ./eof_stdin
>>> fgets: >>> ans=
>>> feof(stdin) is true -- EOF detected
>>> read stdin again, fgets:
zzz
>>> ans=zzz
这是示例测试程序:
#include<stdio.h>
int main(void)
{
char ans[80];
//
// read from stdin
printf(">>> fgets: "); fflush(stdin);
fgets(ans, sizeof(ans), stdin);
printf(">>> ans=%s\n", ans);
if (feof(stdin)) {
printf(">>> feof(stdin) is true -- EOF detected\n");
}
//
// continue read from stdin
printf(">>> read stdin again, fgets: \n");
fgets(ans, sizeof(ans), stdin);
printf(">>> ans=%s\n", ans);
return 0;
}
【问题讨论】: