重定向的理解和使用

1、重定向的理解和使用

重定向是我们学习测试一个程序非常重要的方法技巧,能节省我们许多的测试代码正确与否的时间….

接下来就让我们一起来学习这个编程的小技巧吧 > || <

1.1如何理解重定向?

在我们理解重定向之前我先给他家举个例子来说明重定向的常用的作用
在下面我编写了一个代码,如下:

#include<iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    int a[n]={0};
    for(int i = 0; i < n; i++) {
        cin>>a[i];
    }
    int min = a[0];
    for(int j = 1; j < n; j++) {
        if(min > a[j])
            min = a[j];
    }
    cout<<min;
    return 0;
} 

上面的程序不难,就是输入 n 个数, 求在这 n 个数中的最小值..现在我要求你们测试以下数据

·输入格式:
第一组数据:

5
9 0 7 1 2

输出格式:

0

第二组数据

10
9 8 1 -1 5 4 0 2 9 7

输出格式:

-1

第三组数据

20
9 8 1 -1 5 4 0 2 9 7 2 6 8 7 1 0 3 -9 -2 -3

输出格式:

-9

一般情况下如果你只是一个刚开始学习编程的猿类,一般都会·傻乎乎的在窗口输入数据,回车看结果是否正确。不置可否的是,很多人都会这样做。

·测试数据后的认为
1、当你测试上面数据的时候,输入第一组数据你可能没什么感觉,但是当你输入第三组数据的时候呢,由于各种原因,你难免会输入个别错误的数字,造成结果不对。
2、也有可能代码里的某个变量错误,造成输出错误,那么你要再次重新测试那岂不是又得重新输入测试数据,那得多累啊
3、在命令窗口输入输出数据不够清晰,如果你想将输出数据保存下来怎么办呢?是吧

接下来,我们来解决上面的问题,所以重定向的重要性就体现出来….

1.2 重定向的使用

在理解使用重定向之前我直接将代码贴出来,由我来讲解其怎么使用

#define FLAG
#include<iostream>
using namespace std;
int main() {
#ifdef FLAG
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
    int n;
    cin>>n;
    int a[n]={0};
    for(int i = 0; i < n; i++) {
        cin>>a[i];
    }
    int min = a[0];
    for(int j = 1; j < n; j++) {
        if(min > a[j])
            min = a[j];
    }
    cout<<min;
    return 0;
} 

注意上面对比程序,可以明显看到我们增加了以下语句

#define FLAG

上面的意思是定义了一个叫 FLAG 的宏标识符,接下来在main()中定义以下语句

#ifdef FLAG
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif

不难理解,上面的意思就是说如果定义了标识符FLAG(区分大小写),则执行#ifdef…..#endif之间的语句,反之不执行,那freopen又是什么意思呢?我分开讲解

freopen("input.txt", "r", stdin);

从同源代码文件目录下的input.txt文件(请创建好该文件)中读取我们所需的输入数据,"r"为读取的方式,表示只读(read),stdin输入

freopen("output.txt", "w", stdout);

同上面一样,编译运行程序成功后,若output.txt不存在,则会在目录下自动生成同名文件,打开则会看到程序的输出数据,w表示只写,stdout输出

如果你突然想在窗口测试数据,很简单,将第一行的代码注释即可

//#define FLAG

好了可以说我们的重定向的使用就到这了,这下你们应该能比较清晰的理解重定向的使用了


1.3 延伸拓展

从一名童(ji)鞋(you)哪里看到一道求出最小值的更好的代码,不敢说很厉害却别具美感,但是思路确实我们得多理解

#include<iostream>
using namespace std;
int main() {
    int n, a, min;
    cin>>n;
    cin>>min;
    while(--n) {
        cin>>a;
        if(min > a)min = a;
    }
    cout<<min;
    return 0;
} 

好了,有什么不懂的可以给我留言,如果你感到满意的话可以给我个赞哦~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值