【发布时间】:2018-05-03 06:10:00
【问题描述】:
我有这个命令行参数 -
cat file_name | ./a.out
问题不是从 C 程序中的 cat 命令读取,因为我们可以使用 read()、fgets()、fgetc()我无法使用 fgets 获取用户的输入。
这是我的示例代码
while(fgets(buffer, BUFSIZ, stdin ) != NULL )
puts( buffer ); // Here I have tried strtok( buffer, "\n" ) too.
memset( buffer, 0, BUFSIZ );`
问题出在这一行之后,它没有像下面那样要求输入不起作用-
puts("Name: ");
fgets( buffer, BUFSIZ, stdin );
帮我看看这里出了什么问题?
【问题讨论】:
-
似乎很合理,因为
stdin现在连接到cat命令的输出,然后 fgets() 将从其输出中读取,它无法读取用户在终端输入的内容. -
你知道解决办法吗? @nos
-
@Devesh.Pratap 解决方案是,如果您需要从用户和文件中读取输入,您不能将文件的内容通过管道传输到您的程序中,而是为您的程序提供一个参数并在您自己的程序中打开文件。您可以将其运行为
./a.out file_name -
坚持按设计不可能的事情是没有帮助的。在问题中大喊大叫也不是。最好退后一步,重新考虑您的需求——为什么您认为您需要它?谷歌搜索“XY 问题”。
-
那是因为没有办法。只有一个
stdin,如果您在shell 中进行重定向,shell 会将其连接到另一个命令的输出,就这么简单。注意“这是不可能的”在这里是一个正确的答案。因此,如果您需要进一步的帮助,请说明该要求应该实现什么,我们可以帮助您找到不同的方法。 (而且,为了记录,用全部大写写是“大喊大叫”,即使你不知道......)