freopen重定向输入

Posted kaml8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freopen重定向输入相关的知识,希望对你有一定的参考价值。

  当一个程序调试需多次手动输入数据时,可采用freopen()库函数,先将测试数据存入文件,再调用该函数将输入由键盘重定向为文件,也可以调用该函数将输出由屏幕重定向为文件,直接在文件中查看。

用法:

freopen( "path","mode", stream ); 

其中path表示用于存储输入输出的自定义文件路径,mode表示文件打开的模式(如r-只读, w-写),stream表示 一个文件,且通常使用标准流文件。(标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。)

注:在c/c++中,用到的路径名都应使用"\\"替代原来的"",如"F:c++程序文件报时助手"应改为"F:\\c++程序文件\\报时助手"

示例:报时助手

问题描述
  给定当前的时间,请用英文的读法将它读出来。
  时间用时h和分m表示,在英文的读法中,读一个时间的方法是:
  如果m为0,则将时读出来,然后加上“o‘clock”,如3:00读作“three o‘clock”。
  如果m不为0,则将时读出来,然后将分读出来,如5:30读作“five thirty”。
  时和分的读法使用的是英文数字的读法,其中0~20读作:
  0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven, 8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen, 14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen, 19:nineteen, 20:twenty。
  30读作thirty,40读作forty,50读作fifty。
  对于大于20小于60的数字,首先读整十的数,然后再加上个位数。如31首先读30再加1的读法,读作“thirty one”。
  按上面的规则21:54读作“twenty one fifty four”,9:07读作“nine seven”,0:15读作“zero fifteen”。
输入格式
  输入包含两个非负整数h和m,表示时间的时和分。非零的数字前没有前导0。h小于24,m小于60。
输出格式
  输出时间时刻的英文。
样例输入
0 15
样例输出
zero fifteen

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     freopen("F:\\c++程序文件\\报时助手\\test.txt","r",stdin);//输入重定向,输入数据将从test.txt文件中读取 
 6     freopen("F:\\c++程序文件\\报时助手\\result.txt","w",stdout); //输出重定向,输出数据将保存在result.txt文件中 
 7     int h,m;
 8     printf("Please input h(hour) m(minute):
");
 9     while(scanf("%d %d",&h,&m)!=EOF)
10     {
11         char g[50][50]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty"};
12         char s[10][10]={"twenty","thirty","forty","fifty"};
13         if(m==0)
14             if(h<21)
15                 printf("%s o‘clock",g[h]);
16             else {printf("%s %s o‘clock",s[h/10-2],g[h%10]);}
17         else 
18         {
19             if(h<21)
20                 printf("%s ",g[h]);
21             else {printf("%s %s ",s[h/10-2],g[h%10]);}
22             if(m<21)
23                 printf("%s ",g[m]);
24             else {printf("%s %s ",s[m/10-2],g[m%10]);}
25         }
26         printf("
");
27     }
28     fclose(stdin);//关闭输入文件 
29     fclose(stdout);//关闭输出文件 
30     
31     return 0;
32 }

输入文件test.txt:

技术分享图片

输出文件result.txt:

技术分享图片

可以看出,程序运行时测试了所有数据,结果保存在一个文件中。


















以上是关于freopen重定向输入的主要内容,如果未能解决你的问题,请参考以下文章

freopen()函数

输入输出重定向

文件输入输出重定向

输入输出重定向

文件输入输出:重定向

freopen()使用方法重定向版