• 重定向输入输出流--freopen


    freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境。

    C99函数声明:
    FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream);
    形参说明:
    filename:需要重定向到的文件名或文件路径。
    mode:代表文件访问权限的字符串。例如,"r"表示“只读访问”、"w"表示“只写访问”、"a"表示“追加写入”。
    stream:需要被重定向的文件流。
    返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
    #include <stdio.h>
    int main(void)
    {
        /* redirect standard output to a file */
        if(freopen("D:\output.txt", "w", stdout) == NULL)
            fprintf(stderr,"error redirecting stdout
    ");
        /* this output will go to a file */
        printf("This will go into a file.
    ");
        /*close the standard output stream*/
        fclose(stdout);
        return 0;
    }
    

      

    再看一个例子,在D盘的目录下,新建立一个文件,把一串数字写入到文件中去:

    #include <stdio.h>
    int main(void)
    {
        int i;
        if (freopen ("D:\output.txt", "w", stdout) == NULL)
            fprintf(stderr, "error redirecting stdout
    ");
        for (i = 0; i < 10; i++)
            printf("%3d", i);
        printf("
    ");
        fclose(stdout);
        return 0;
    }
    

      编译运行一下,你会发现,十个数输出到了D盘根目录下文本文件output.txt中

    #include <stdio.h>
    int main(void)
    {
        int a, b;
        freopen("in.txt","r",stdin);
        /* 如果in.txt不在连接后的exe的目录,需要指定路径如D:\in.txt */
        freopen("out.txt","w",stdout);
        while (scanf("%d%d", &a, &b) != EOF)
            printf("%d
    ",a+b);
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    

      从文件in.txt中读入数据,计算相邻两个数的加和输出到out.txt中

    由于这里面用到了scanf这个函数,这里有必要说一下:

    scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
    如:
    scanf("%d %d",&a,&b);
    如果a和b都被成功读入,那么scanf的返回值就是2
    如果只有a被成功读入,返回值为1
    如果a和b都未被成功读入,返回值为0
    如果遇到错误或遇到end of file,返回值为EOF。
    且返回值为int型。
     
    &a,&b,&c中的&是地址运算符,&a指a在内存中的地址。scanf的作用是:按照a,b,c的内存地址将输入的数据存到a,b,c中去。变量a,b,c的地址是在编译连续阶段分配的(存储顺序由编译器决定)。
    这里注意:如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以加逗号,只能是空格或tab键或者回车键——“2 3 4” 或 “2(按tab)3(按tab)4(按tab)”。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。
  • 相关阅读:
    XML语法
    C/C++对MySQL操作
    HDU 3966 Aragorn's Story
    SPOJ 375 Query on a tree
    SPOJ 913 Query on a tree II
    SPOJ 6779 Can you answer these queries VII
    URAL 1471 Tree
    SPOJ 2798 Query on a tree again!
    POJ 3237 Tree
    SPOJ 4487 Can you answer these queries VI
  • 原文地址:https://www.cnblogs.com/stemon/p/4595624.html
Copyright © 2020-2023  润新知