C语言 加载标准输入缓冲区



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

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

#include <stdio.h>
#include <string.h>
int main(void) {
  char myString[100];
  char *hello = "hello worldn";
  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必须立即返回) - 因此您需要单独处理。我没有必要单独点击回车 - 只需运行程序即可。

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

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

最新更新