先介绍文件输入输出,要用到:
模式 | 描述 |
“r” | 打开一个用于读取的文件。该文件必须存在。 |
“w” | 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 |
“a” | 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。 |
“r+” | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
“w+” | 创建一个用于读写的空文件。 |
“a+” | 打开一个用于读取和追加的文件。 |
总结: | 规律 |
r | read,文件必须存在 |
w | write,原清空 |
a | 追加 |
+ | 读写均可 |
三种文件操作函数:
//第一种:fopen
FILE* fp=fopen("text.in(/out)","r(/w)");//最后改为stdin/stdout
fscanf(fp,"%d",&n);
(fprintf(fp,"%d",n);)
//缺点:每次多打fp,也容易忘记改回注释导致re
//第二种:freopen
//功能:重定向,把本来对后者的改为对前者
FILE* fp=freopen("text.in","r",stdin);
//fp不要也罢,
//只是说改哪个,改stdin,或者某FILE*型的(stdin,stdout等价于一个FILE*)如
/*FILE* fp=freopen("text.in","r",stdin);
FILE*Fp=freopen("text.in","r",fp);
printf("%p",Fp);*/
FILE* Fp=freopen("text.in","a+",stdout);
scanf("%s",ch);
printf("%s\n",ch);
//很有趣的小程序,text.in自己变长了一节。
//优点:不用多打fp,缺点:没有提示更容易忘记注释
//第三种:宏定义辅助
#define LOCAL
...
#ifdef LOCAL
freopen("text.in","r",stdin);
#endif
//优点:最后把LOCAL注释即可
//第四种:编译命令,参考
//
//编译命令添加:
-D LOCAL //我的DEVc++IDE里还有-std=c++11 ,空格分开
//打开编译命令:工具->编译选项->编译命令
//本以为,命令行中是:gcc -D LOCAL -std=c++11 [文件名]就可以
//后来发现根本没编译
//蒟蒻不知道怎么命令行编译,求好心人教教~
//程序中:
#ifdef LOCAL
freopen("text.in","r",stdin);
#endif
//优点:不用修改了,不用担心这个
//第五种:命令行操作
//命令行中:
hello < text.in > text.out
//顺序不重要,hello > text.out < text.in 也可
//就会让hello.exe读入text.in,输到text.out
//优点:根本不需要有控制输入输出的代码
//缺点:需要命令行,也要cd进入
以上就是五种文件输入输出方式大总结
蒟蒻不知道怎么命令行编译,求好心人教教~
plus:
累死仙仙了,好像今天的题解又要超时写一下午了呢
不过做一件事,如果不是喜欢这事情本身,而是注重拿奖的结果,是学不好的。我要改变想法,我就是享受这个过程的。