加载stdin缓冲区

时间:2013-10-16 02:55:13

标签: c buffer stdin

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

2 个答案:

答案 0 :(得分: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必须立即返回) - 因此您需要单独处理。我没有必要单独点回车 - 只需运行程序。

我相信你可以根据自己的需要调整它。

答案 1 :(得分:0)

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