先介绍文件输入输出,要用到:

模式

描述

“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:
累死仙仙了,好像今天的题解又要超时写一下午了呢
不过做一件事,如果不是喜欢这事情本身,而是注重拿奖的结果,是学不好的。我要改变想法,我就是享受这个过程的。