用C语言改变流

时间:2011-03-03 15:21:51

标签: c

我想知道如何更改程序当前流? 我的意思是我想从文件中获取我的输入。

3 个答案:

答案 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的所有输入(例如scanfgetchar等)都来自名为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代替scanfgetc代替getcharfgets代替gets

答案 2 :(得分:0)

函数freopen()用于更改已打开文件流的分配。它符合C89标准C - 尽管链接符合POSIX标准。