ca75a_c++_标准IO库-利用流对象把文件内容读取到向量-操作文件
/*ca75a_c++_标准IO库习题练习
习题8.3,8.4,8.6
习题8.9、8.10
ifstream inFile(fileName.c_str());
1>d:\users\txwtech\projects\ca75a\ca75a\ca75a.cpp(28): error C2079: “inFile”使用未定义的 class“std::basic_ifstream<char,std::char_traits<char>>”
1>d:\users\txwtech\projects\ca75a\ca75a\ca75a.cpp(28): error C2440: “初始化”: 无法从“const _Elem *”转换为“int”
//未包含#include <fstream>。
调用的函数参数,能够接收基类(istream)的地方,都能够接受子类(ifstream)
参考:
https://blog.csdn.net/txwtech/article/details/104251103
std::istream& get(std::istream &in)//8.3
get函数也可以接收ifstream
*/
while (getline(inFile, s))//一次读取一行,放在s里面
while(inFile>>s) //>>流输入操作符,一个一个的单词读取,空格作为单词分割的标志
inFile是流对象,inFile绑定了一个文件,把文件内容传递个s
————————————————
1 /*ca75a_c++_标准IO库习题练习 2 习题8.3,8.4,8.6 3 习题8.9、8.10 4 5 ifstream inFile(fileName.c_str()); 6 1>d:\users\txwtech\projects\ca75a\ca75a\ca75a.cpp(28): error C2079: “inFile”使用未定义的 class“std::basic_ifstream<char,std::char_traits<char>>” 7 1>d:\users\txwtech\projects\ca75a\ca75a\ca75a.cpp(28): error C2440: “初始化”: 无法从“const _Elem *”转换为“int” 8 9 //未包含#include <fstream>。 10 11 调用的函数参数,能够接收基类(istream)的地方,都能够接受子类(ifstream) 12 参考: 13 https://blog.csdn.net/txwtech/article/details/104251103 14 15 std::istream& get(std::istream &in)//8.3 16 get函数也可以接收ifstream 17 */ 18 #include <iostream> 19 #include <string> 20 //#include <istream> 21 #include <fstream> 22 using namespace std; 23 24 #include "get.h" 25 26 int main() 27 { 28 29 cout << "测试新写的函数,请输入数字,或者字母" << endl; //8.4 30 double dval; 31 get(cin); //输入什么内容,显示什么内容。输入错误可以有提示 32 33 cout << "继续使用cin,输入一个double: " << endl; 34 cin >> dval; 35 cout << "您输入的是: " << dval << endl; 36 37 cout << "习题8.6" << endl; 38 39 string fileName; 40 //fileName="aa.txt"; 41 cout << "Enter file name请输入一个文件名:test.txt " << endl; 42 cin >> fileName; 43 ifstream inFile(fileName.c_str()); //绑定输入的文件 44 if (!inFile) 45 { 46 cerr << "error:can not open input file" << fileName << endl; 47 return -1; 48 } 49 get(inFile); 50 51 52 53 54 return 0; 55 }
get.cpp
1 #include "get.h" 2 3 std::istream& get(std::istream &in)//8.3 4 { 5 int ival; 6 while (in >> ival, !in.eof())//让in.eof()决定是否结束,ctrl+z结束输入 7 { 8 if (in.bad())//巨大错误 9 throw std::runtime_error("IO stream error"); 10 if (in.fail())//判断输入类型是否相同 11 { 12 std::cerr << "bad data,try again." << std::endl; //std名称空间 13 in.clear();//恢复流到正常状态 14 in.ignore(200,'\n');// 15 continue; 16 } 17 std::cout << "输入的数据: " << ival << std::endl; 18 } 19 in.clear();//恢复流到正常状态 20 }
get.h
1 //#pragma once 2 #ifndef _GET_H 3 #define _GET_H 4 5 //头文件不要用using namesapce std; 6 #include <iostream> 7 std::istream& get(std::istream &in); 8 9 10 #endif
欢迎讨论,相互学习。
cdtxw@foxmail.com