我有一个函数调用fgets()
stdin
作为流,寻找用户输入。但是,在某些情况下,我宁愿让程序决定输入的内容而不是要求用户输入。如果我能在使用stdin
调用函数之前找到一种方法来加载带有值的fgets()
缓冲区,那么是否允许我在仍然进行程序输入时不改变包含fgets()
的函数?如果是这样,如何加载stdin
缓冲区?
答案 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缓冲区。在我编写的一些程序中,我有可选的命令行参数。您可以添加命令行标志,并在命令行中包含可选输入或作为输入文本文件。如果此选项适合您,我可以扩展此答案。