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;
}
好了,有什么不懂的可以给我留言,如果你感到满意的话可以给我个赞哦~~