我想知道如何更改程序当前流? 我的意思是我想从文件中获取我的输入。
答案 0 :(得分:5)
假设您正在讨论由FILE *对象stdin和stdout表示的标准C I / O流,您可以使用freopen():
/* Change stdin to read from the given file. */
freopen("funny-input.txt", "rt", stdin);
答案 1 :(得分:1)
也许你有这样的程序:
#include <stdio>
int main(int ac, char **av) {
int i;
if(scanf("%d", &i) == 1)
printf("Answer: %d\n", i);
else
printf("No answer\n");
return 0;
}
并且您想要“更改当前流”。除了其他地方列出的“freopen”选项,您可能还想重定向输入。如果您使用shell(UNIX)或控制台窗口(WINDOWS)来调用您的程序:
C:\> MYPROG.EXE
而是,因此调用它
C:\> MYPROG.EXE < INPUTFILE.TXT
在这种情况下,stdin
的所有输入(例如scanf
,getchar
等)都来自名为INPUTFILE.TXT
的文件,而不是您的键盘
或者,您可以在程序中打开文件:
#include <stdio>
int main(int ac, char **av) {
FILE *input;
int i;
input = fopen("INPUTFILE.TXT", "r");
if(!input) {
printf("No input file\n");
return 1;
}
if(fscanf(input, "%d", &i) == 1)
printf("Answer: %d\n", i);
else
printf("No answer\n");
return 0;
}
请注意,您已打开新的输入文件,并在后续调用中使用生成的句柄。另请注意,您必须使用稍微不同的调用来从指定的句柄而不是stdin
进行读取。例如,您必须使用fscanf
代替scanf
,getc
代替getchar
,fgets
代替gets
。
答案 2 :(得分:0)
函数freopen()
用于更改已打开文件流的分配。它符合C89标准C - 尽管链接符合POSIX标准。