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