我希望使用EOF终止读取批量用户输入,但仍然能够接受用户CLI输入。
Linux似乎允许这种行为,但OS/X只是关闭stdin输入流(从下面的测试程序中可以看出)。
有什么变通方法可以让它在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;
}