freopen()重定向

freopen函数:

        使用不同的文件或模式重新打开流,即重定向

 

C++

 

   //把一个字符串写入到文件中去:
#include<iostream>
using namespace std;

int main(void)
{
    /* redirect standard output to a file */
    if(freopen("D:\\out.txt", "w", stdout) == NULL)
        fprintf(stderr,"error redirecting stdout\n");
    /* this output will go to a file */
    printf("This will go into a file.\n");
    string s = "12345";
    cout<<s<<endl; 
    int a,b;
    while(cin>>a>>b){
        cout<<a<<b<<endl; 
    }
    /*close the standard output stream*/
    fclose(stdout);
    return 0;
}
View Code

 

#include <iostream>
using namespace std;

int main(void)
{
    FILE *fp;
    fp = freopen("D:\\in.txt","r",stdin);   //freopen() 的返回值,如果与文件连接建立失败,返回NULL
    
    if(fp!=NULL){            //与文件连接建立成功
        int c;
        cin>>c;             //从文件中读入数据
        cout<<c<<endl;      //在屏幕上显示数据
    }else{
        cout<<"Open Error"<<endl;
    }
    
    //输出到控制台“CON”
    fp = freopen("CON","r",stdin);
    int a, b;
    cin>>a>>b;
    cout<<a<<b<<endl<<endl;  
    return 0;
}
View Code
#include<iostream>
using namespace std;

int main()
{
    
    freopen("D:\\in.txt", "r", stdin);
    freopen("D:\\out.txt", "w", stdout);
    
    int a, b;
    while (cin >> a >> b)
        cout << a + b << endl;
    fclose(stdin);
    
    fclose(stdout);

    return 0;
}
View Code
#include<iostream>
using namespace std;

int main()
{
    int a, b;
    freopen("D:\\in.txt", "r", stdin);
    freopen("D:\\out.txt", "w", stdout);
    while (scanf("%d%d", &a, &b) == 2)
        printf("%d\n", a + b);
    fclose(stdin);
    fclose(stdout);

    return 0;
}
View Code
#include<iostream>
using namespace std;

int main()
{
    int a, b;
    freopen("D:\\in.txt", "r", stdin);
    freopen("D:\\out.txt", "w", stdout);
    while (scanf("%d%d", &a, &b) == 2)
        printf("%d\n", a + b);
    //fclose(stdin);
    //fclose(stdout);
    freopen("CON", "r", stdin);
    freopen("CON", "w", stdout);
    printf("Hello World\n");
    scanf("%d%d", &a,&b);

    return 0;
}
View Code
#include<iostream>
using namespace std;

int main()
{
    int a, b;
    freopen("D:\\in.txt", "r", stdin);
    freopen("D:\\out.txt", "w", stdout);
    while (scanf("%d%d", &a, &b) == 2)
        printf("%d\n", a + b);
    //fclose(stdin);
    //fclose(stdout);
    freopen("CON", "r", stdin);
    freopen("CON", "w", stdout);
    printf("Hello World\n");
    scanf("%d%d", &a,&b);

    return 0;
}
View Code

 

需要注意,这里其实没有真正关闭,只是再次重定向,回到控制台。

在windows/DOS,读文件后用freopen("CON", "r", stdin),写文件后  freopen("CON", "w", stdout)。

在linux中,控制台设备是 /dev/console:freopen("/dev/console", "r", stdin)。

 

posted @ 2019-10-11 14:56  七忆鱼  阅读(310)  评论(0编辑  收藏  举报