输入流stdin默认是键盘,输出流stdout默认是显示器,错误流stderr
#includeint main(){ printf("请输入选择的数字:\n"); // 标准输出流 int choice; scanf("%d",&choice); // 标准输入流 printf("您输入的数字是:%d\n",choice);}
root@jiqing:~/cspace/les4# ./cio.out请输入选择的数字:10您输入的数字是:10
#includeint main(){ // printf("please input the value a: \n"); fprintf(stdout,"please input the value a: \n"); // 非标准输出流 int a; // scanf("%d",&a); fscanf(stdin,"%d",&a); // 非标准输入流 if (a<0) { fprintf(stderr,"the value must > 0 \n"); return 1; } return 0;}
root@jiqing:~/cspace/les4# ./cio.out please input the value a: -1the value must > 0
重定向
#includeint main(){ printf("please input value of i:\n"); int i; scanf("%d",&i); printf("please input value of j:\n"); int j; scanf("%d",&j); printf("i+j=%d\n",i+j); return 0;}
root@jiqing:~/cspace/les5# cc main.c -o main.out && ./main.outplease input value of i:10please input value of j:20i+j=30
管道重定向处理
root@jiqing:~/cspace/les5# ./main.out 1>> a.txt1020root@jiqing:~/cspace/les5# cat a.txtplease input value of i:please input value of j:i+j=30
这个时候会将所有的标准输出流都写入到a.txt中。
root@jiqing:~/cspace/les5# ./main.out 1> a.txt1020root@jiqing:~/cspace/les5# cat a.txtplease input value of i:please input value of j:i+j=30
单箭头不会累计数据,每次都是最新的数据。
重定向输入流。
新建一个input.txt
1030
root@jiqing:~/cspace/les5# ./main.out < input.txtplease input value of i:please input value of j:i+j=40
直接就输出了结果,键盘都没有敲。
标准错误流,
#includeint main(){ printf("please input value of i:\n"); int i; scanf("%d",&i); printf("please input value of j:\n"); int j; scanf("%d",&j); if (0!=j) { printf("%d/%d=%d\n",i,j,i/j); } else { fprintf(stderr,"j must > 0\n"); return 1; } return 0;}
root@jiqing:~/cspace/les5# ./main.out 1>t.txt 2>f.txt100root@jiqing:~/cspace/les5# cat t.txtplease input value of i:please input value of j:root@jiqing:~/cspace/les5# cat f.txtj must > 0
错误流会重定向到f.txt中,正确流会到t.txt中。
三者结合使用,
root@jiqing:~/cspace/les5# vim input.txt
100
root@jiqing:~/cspace/les5# ./main.out 1>t.txt 2>f.txt0