小学生学C++编程语法知识(C++文件读写与重定向)
文件王国大冒险——C文件读写与重定向学习目标什么是文件为什么程序要读写文件认识文本文件学会ofstream学会ifstream学会fstream学会cin、cout重定向能独立完成文件输入输出第一幕程序王国的新任务1、有一天程序王国举办了一场数学比赛。国王说今天有100万个数字需要处理。小程序员问老师我直接输入100万个数字吗老师笑了。如果一个一个输入你可能要输几个小时。2、于是老师拿出了一张纸。纸上已经写好了所有数据。老师说程序不仅能和键盘交流。它还能和纸交流。这张纸在计算机里就叫做——文件File第二幕什么是文件1、我们每天都会接触很多文件。例如作文.docx 照片.jpg 音乐.mp3 电影.mp4 程序.cpp 成绩.txt2、程序也可以自己创建文件。1例如score.txt name.txt data.txt result.txt这些文件都会保存在电脑里。程序下次还能继续使用。2这就叫文件存储File Storage第三幕文本文件是什么1、文件有很多种。1最容易学习的是文本文件Text File2例如score.txt3里面可能写着90 87 100 664或者Tom Jack Lucy5甚至Hello World6文本文件最大的特点✔ 能直接打开✔ 能看懂里面内容2、例如记事本Notepad打开以后Hello 123 ABC都能直接看到。3、文件分类一般来说文件可以分成两大类。第一类文本文件Text File例如.txt .cpp .html .json .xml特点能直接阅读一个字符一个字符保存最容易学习例如100 200 300第二类二进制文件Binary File例如.jpg .mp3 .mp4 .exe打开以后■□★※╬▒▒◣根本看不懂。因为里面保存的是010110101010二进制数据。以后学习图片、游戏时再研究。今天我们只学习文本文件。第四幕程序如何写文件1、程序王国里来了一个新角色。名字叫ofstream意思就是Output File Stream输出文件流它负责把数据写进文件。2、第一个程序#include iostream #include fstream using namespace std; int main() { ofstream fout(score.txt); fout 100 endl; fout 98 endl; fout 95 endl; fout.close(); cout 写入完成; return 0; }运行以后。电脑里就会出现score.txt里面内容100 98 953、逐句解释1创建文件ofstream fout(score.txt);2意思就是打开或创建 score.txt3以后所有fout 都会写进文件。例如fout100;不是输出到屏幕。而是写进文件。4关闭文件fout.close();表示我已经写完啦养成好习惯写完就关闭文件。第五幕连续写很多数据1、例如#includeiostream #includefstream using namespace std; int main() { ofstream fout(number.txt); for(int i1;i10;i) { fouti ; } fout.close(); return 0; }1文件内容1 2 3 4 5 6 7 8 9 102是不是和平时cout几乎一样3因为ofstream 支持 运算符第六幕程序如何读文件1、现在ifstream登场。2、它的全称是Input File Stream意思从文件读取数据。3、例如1score.txt里面88 99 772程序#includeiostream #includefstream using namespace std; int main() { ifstream fin(score.txt); int a,b,c; finabc; coutaendl; coutbendl; coutcendl; fin.close(); return 0; }3输出88 99 77是不是和平时cin完全一样4因为ifstream 支持 运算符。第七幕读取很多数字1文件1 2 3 4 52程序#includeiostream #includefstream using namespace std; int main() { ifstream fin(number.txt); int x; while(finx) { coutx ; } fin.close(); return 0; }3输出1 2 3 4 5为什么这样能一直读4因为finx成功返回真。失败返回假。5文件读完以后。循环自动结束。这是文件读取最常见的方法。第八幕竞赛里的秘密——重定向1、到了信息学比赛。1能不能直接使用cin cout2进行文件定向读取input.txt output.txt3一般竞赛已经准备好了input.txt你写的程序只需要自己去读。结果自己写。2、于是出现一种神奇操作重定向Redirect意思就是1把cin改成文件输入2把cout改成文件输出第九幕cin重定向1、例如input.txt内容10 202、程序#includeiostream #includefstream using namespace std; int main() { ifstream fin(input.txt); cin.rdbuf(fin.rdbuf()); int a,b; cinab; coutab; return 0; }3、程序仍然写cinab;但是实际上已经从input.txt读取了。是不是特别神奇第十幕cout重定向1、程序#includeiostream #includefstream using namespace std; int main() { ofstream fout(output.txt); cout.rdbuf(fout.rdbuf()); coutHelloendl; cout100endl; return 0; }2、程序里写的是cout实际上已经写进output.txt里面。第十一幕cin和cout一起重定向1、这是比赛的写法。input.txt30 502、程序#includeiostream #includefstream using namespace std; int main() { ifstream fin(input.txt); ofstream fout(output.txt); cin.rdbuf(fin.rdbuf()); cout.rdbuf(fout.rdbuf()); int a,b; cinab; coutab; return 0; }3、程序结束以后output.txt里面804、整个程序根本不用修改cin cout只是换了输入输出的位置。这就是输入输出重定向。第十二幕另一种比赛中更常见的重定向——freopen1、除了使用ifstream和ofstream重定向还有一种在信息学竞赛中更常见的方法freopen(input.txt,r,stdin); freopen(output.txt,w,stdout);2、完整程序#includeiostream #includecstdio using namespace std; int main() { freopen(input.txt,r,stdin); freopen(output.txt,w,stdout); int a,b; cinab; coutab; return 0; }3、这里r表示读取readw表示写入writestdin表示标准输入键盘stdout表示标准输出屏幕执行后cin会从input.txt中读取数据。cout会把结果写入output.txt。这种方法在许多 OJ在线评测系统调试程序时都很常见因为只需要加两行代码就能保持后面的cin、cout完全不变。第十三幕今天学会了什么文件家族类名功能常用操作ofstream写文件ifstream读文件常见文件操作操作方法写文件ofstream读文件ifstream输入输出重定向cin.rdbuf()、cout.rdbuf()或freopen()本课小结今天我们走进了文件王国认识了程序与文件交流的方法理解了什么是文本文件和二进制文件。学会使用ofstream创建并写入文本文件。学会使用ifstream从文本文件读取数据并掌握while(fin x)的常用读取方式。理解了输入输出重定向的思想学会了使用cin.rdbuf()、cout.rdbuf()和竞赛中常用的freopen()实现文件输入输出。对于信息学竞赛来说重定向最大的好处是程序的主体代码几乎不用修改只需改变数据来源和输出位置就可以在键盘、屏幕与文件之间自由切换。这也是许多优秀程序员在调试程序时经常使用的技巧。