ifstream ofstream 的初始化使用
2017-11-13 02:21
302 查看
这两个一个控制了信息往程序里输入,另一个控制了从程序里往外界输出信息
引用包 : #include
类实现 : ifstream instream;
ofstream outstream; 完成实现以后的instream 相当于一个信息导入器,利用信息导入器完成信息往程序里的导入
(理论是这么说,但是实际操作的时候会遇到很多问题)
主程序里实现的 instream对象 是不能拿到支线函数里使用的
instream 往往伴随着 支线程序 因为instream 会存在读取不出来的问题,因此往往需要一个 while + !instream.fail() 来配合使用
所以在这种情况下 , instream的实现需要在支线程序里完成,同样的
instream.open (“文件“) -> 链接文件
instream.get (ch) -> 从文件中读取字符
这样的操作也是在支线程序里一并完成了 其他内容加工的操作也一并完成
最后直接返回给main函数 读取到的内容/ 甚至是对内容加以操作的内容
instream与outstream的另类读取方式
outstream的另类输出方式 outstream << 内容1 << 空格 << 内容2
实际得到的结果: 与outstream相链接的文件里就会有 内容1+空格+内容2
instream的另类输入方式 instream >> 变量1(类型1) >> 空格 >>变量2( 类型2 ) 其中 变量1与2分别被初始化成了类型1 与类型2
实际得到的结果 : 系统就按照指令从文件中读取出一个符合类型1的赋值给变量1 再读取出一个符合类型2的赋值给变量2
3.一个发现:很多时候instream.eof() 不会发挥作用
具体主要表现在:明明已经是文章末尾,但是却不发挥作用,这样的特点导致while(!instream.eof()) 不会发挥作用
这样的原因是instream会默认将文章末尾的内容读取两遍针对这样的特点有两种解决方法
利用while (instream>>ch) 当读取不进去的时候会自动终止,但是缺点也很明显,例如
- 我们想从文件中读取数字 就 instream >> int 但是文件中如果有25x这样的存在 ,文章会读取一个25, 在下一轮的时候,到了x instream不会将x读给int ,条件不成立,while循环终止,我们就没机会读取25x这样一个错误了
考虑到文章末尾的内容会被读取两次,因此如果此时读取到的的int等于上一次读取到的int 我们就认为已经是文章末尾,利用break退出循环 ,以下示范代码片段
解决方案:
先用 instream >> in;
再执行while(!instream.eof( )),此时方可奏效
具体来说:
引用包 : #include
类实现 : ifstream instream;
ofstream outstream; 完成实现以后的instream 相当于一个信息导入器,利用信息导入器完成信息往程序里的导入
(理论是这么说,但是实际操作的时候会遇到很多问题)
主程序里实现的 instream对象 是不能拿到支线函数里使用的
instream 往往伴随着 支线程序 因为instream 会存在读取不出来的问题,因此往往需要一个 while + !instream.fail() 来配合使用
所以在这种情况下 , instream的实现需要在支线程序里完成,同样的
instream.open (“文件“) -> 链接文件
instream.get (ch) -> 从文件中读取字符
这样的操作也是在支线程序里一并完成了 其他内容加工的操作也一并完成
最后直接返回给main函数 读取到的内容/ 甚至是对内容加以操作的内容
instream与outstream的另类读取方式
outstream的另类输出方式 outstream << 内容1 << 空格 << 内容2
实际得到的结果: 与outstream相链接的文件里就会有 内容1+空格+内容2
instream的另类输入方式 instream >> 变量1(类型1) >> 空格 >>变量2( 类型2 ) 其中 变量1与2分别被初始化成了类型1 与类型2
实际得到的结果 : 系统就按照指令从文件中读取出一个符合类型1的赋值给变量1 再读取出一个符合类型2的赋值给变量2
3.一个发现:很多时候instream.eof() 不会发挥作用
具体主要表现在:明明已经是文章末尾,但是却不发挥作用,这样的特点导致while(!instream.eof()) 不会发挥作用
这样的原因是instream会默认将文章末尾的内容读取两遍针对这样的特点有两种解决方法
利用while (instream>>ch) 当读取不进去的时候会自动终止,但是缺点也很明显,例如
- 我们想从文件中读取数字 就 instream >> int 但是文件中如果有25x这样的存在 ,文章会读取一个25, 在下一轮的时候,到了x instream不会将x读给int ,条件不成立,while循环终止,我们就没机会读取25x这样一个错误了
考虑到文章末尾的内容会被读取两次,因此如果此时读取到的的int等于上一次读取到的int 我们就认为已经是文章末尾,利用break退出循环 ,以下示范代码片段
while (!instream.eof() ) { instream >> in; if (in == mappingboard[length-1]) break; if (instream.fail()) leaving_programme(4); mappingboard[length]=in; if (this->mappingboard[length]>25 || this->mappingboard[length] <0) leaving_programme(3); for (int a=0; a<length;a++){ if(mappingboard[length]==mappingboard[a]) leaving_programme(5); } length++;
解决方案:
先用 instream >> in;
再执行while(!instream.eof( )),此时方可奏效
具体来说:
问题已经解决了,面对所有的情况,以下的经验都适用: 1.首先想要使用while(!instream.eof()) 必须要先在之前尝试使用一次instream>>in 即使是instream.putback都可以,但是至少要使用一次,然后eof才会奏效 2.其次不能把instream >>in放在while循环的最后面,因为如果放在最后面,读取完这一次,然 后instream就指向了文章末尾,自然while条件就不成立了,因此最后一个数字就不会被操作 3.不要总是想着为什么针对有的文件成立有的文件不成立,不成立自然是因为文件格式有问题, 如果你在文章末尾加上了回车号,以上的判断条件都是不成立的,自然会失败 4.putback行为针对char字符是奏效的,但是针对int类型,再执行putback就是无效的 5.心态不能爆炸,做不出来就慢慢做,一个毛病一个毛病的找,做的快不是做的好,想要得高分还是要做的好
相关文章推荐
- ifstream ofstream 的初始化使用
- ifstream、ofstream的使用
- ifstream,ofstream的使用方法
- 数组初始化对象,ifstream,ofstream
- c++中ifstream,ofstream和fstream的使用方法
- 考考你的基础知识:C++ 文件操作ofstream、ifstream使用
- C++文件读写详解(ofstream,ifstream,fstream)还有简单使用
- fstream ifstream ofstream的使用
- C++的ofstream与ifstream使用
- 文件流(fstream/ifstream/ofstream)作为类成员变量的初始化方式
- C++文件读写详解(ofstream,ifstream,fstream)
- C++文件操作详解(ifstream、ofstream、fstream)
- C++文件操作详解(ifstream、ofstream、fstream)
- ifstream 与ofstream用法——转
- C++文件操作详解(ifstream、ofstream、fstream)
- C++ 读写文件方法--fstream,ofstream,ifstream
- ofstream的使用方法
- 学习笔记之ofstream 和ifstream的具体用法
- c++使用getline和ifstream读取文件
- 【转载】C++文件操作详解(ifstream、ofstream、fstream)