比赛调试利器-freopen

功能: 替换一个流,或者说重新分配文件指针,实现重定向。

如果stream流已经打开,则先关闭该流。如果该流已经定向,则freopen将会清除该定向。

此函数一般用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错。

用 法: FILE *freopen(const char *filename,const char *type, FILE *stream);

头文件:stdio.h

参数说明:
               path:
文件名,用于存储输入输出的自定义文件名。
               mode:
文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。
               stream:
一个文件,通常使用标准流文件。 

返回值:如果成功则返回该指向该stream的指针,否则为NULL。

 

举例说明

//SDUT 1568

#include <stdio.h>
#include <string.h>

int main()
{
    int a[100][100];
    int i = 0,c = 0;
    int *p;
    int h = 0,l = 0;
    int ih = 0,il = 0;

    //freopen ("1.txt","r",stdin);

    scanf ("%d %d",&h,&l);
    for (ih = 0;ih < h;ih++)
        for (il = 0;il < l;il++)
            scanf ("%1d",&a[ih][il]);

    for (ih = 0;ih < h;ih++)
    {
        i = 0;
        p = a[ih];

        while (*p != 0 && i < l)
        {
            p++;
            i++;
        }

        if (i >= l)
        {
           c++;
        }
    }

    while (c--)
    {
        for (il = 0;il < l;il++)
                printf ("0");
            printf ("\n");
    }


    for (ih = 0;ih < h;ih++)
    {
        i = 0;
        p = a[ih];

        while (*p != 0 && i < l)
        {
            p++;
            i++;
        }

        if (i < l)
        {
            for (il = 0;il < l;il++)
                printf ("%d",a[ih][il]);
            printf ("\n");
        }
    }

    return 0;
}


 

在这题目中,测试数据居然是:

6 6
000000
001100
111111
101010
111111
101011

 

在比赛中,输入这样的数据是很浪费时间的,而且调试多次,每次都输入简直有点不可能,所以,改变输入流用文件输入是非常值得考虑的。

 

 

c语言中的freopen函数用于实现重定向,将预定义的标准流文件定向到指定的文件中。具体来说,它可以将stdin(标准输入流,默认为键盘)、stdout(标准输出流,默认为屏幕)和stderr(标准错误流,默认为屏幕)重定向到指定的文件。 使用freopen函数需要包含头文件iostream和stdio.h,并使用命名空间std。函数的原型如下: ```c FILE* freopen(const char* path, const char* mode, FILE* stream); ``` 其中,path是重定向文件的路径,mode是打开文件的模式(如“r”表示读取,"w"表示写入,"a"表示追加),stream是要重定向的流文件。 举个例子,假设我们使用以下代码: ```c freopen("D:\\CZHSoftware\\C语言\\Dev编程h\\freopen\\freopenTest.txt","w",stdout); freopen("D:\\CZHSoftware\\C语言\\Dev编程h\\freopen\\freopenTest1.txt","r",stdin); ``` 第一行代码的作用是将stdout重定向到"D:\\CZHSoftware\\C语言\\Dev编程h\\freopen\\freopenTest.txt"文件中,这样输出结果就可以通过打开freopenTest.txt文件来查看。 第二行代码的作用是将stdin重定向到"D:\\CZHSoftware\\C语言\\Dev编程h\\freopen\\freopenTest1.txt"文件中,这样在使用scanf或cin输入时,会从freopenTest1.txt文件中获取输入。 以下是回答您的问题后的几个相关问题: 相关问题: 1. 你能解释一下重定向的作用和用途吗? 2. 除了freopen,c语言中还有其他方法可以实现重定向吗? 3. 重定向会对程序的执行效率有影响吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值