1

我有一个作为流调用的函数fgets()stdin寻找用户输入。但是,在某些情况下,我宁愿让程序决定输入的内容,而不是要求用户输入。如果我能找到一种方法stdin在调用函数之前用值加载缓冲区,那是否允许我在仍然接受程序输入的同时fgets()不改变包含的函数?fgets()如果是这样,将如何加载stdin缓冲区?

4

2 回答 2

2

我有一个很酷的技巧,你可能会喜欢尝试:

#include <stdio.h>
#include <string.h>

int main(void) {
  char myString[100];
  char *hello = "hello world\n";
  int ii;
  for(ii=strlen(hello); ii>=0; ii--) ungetc(hello[ii], stdin);
  fgets(myString, 99, stdin);
  printf("I just read '%s'\n", myString);
  return 0;
}

当我编译并运行时,我得到:

I just read 'hello world
'

请注意,newline与字符串一起保留(必须fgets立即返回)-因此您需要单独处理。我不需要单独按回车键 - 只需运行程序即可。

我相信您可以根据自己的需要进行调整。

于 2013-10-16T03:22:25.147 回答
0

我有一个答案,但它不涉及标准缓冲区。在我编写的一些程序中,我有可选的命令行参数。您可以添加命令行标志并在命令行中或作​​为输入文本文件包含可选输入。如果此选项适合您,我可以扩展此答案。

于 2013-10-16T03:09:13.027 回答