/*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
/*ca75a_c++_标准IO库习题练习
习题8.3,8.4,8.6
习题8.9、8.10ifstream 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/104251103std::istream& get(std::istream &in)//8.3
get函数也可以接收ifstream
*/
#include <iostream>
#include <string>
//#include <istream>
#include <fstream>
using namespace std;#include "get.h"int main()
{cout << "测试新写的函数,请输入数字,或者字母" << endl; //8.4double dval; get(cin); //输入什么内容,显示什么内容。输入错误可以有提示cout << "继续使用cin,输入一个double: " << endl;cin >> dval;cout << "您输入的是: " << dval << endl;cout << "习题8.6" << endl;string fileName;//fileName="aa.txt";cout << "Enter file name请输入一个文件名:test.txt " << endl;cin >> fileName;ifstream inFile(fileName.c_str()); //绑定输入的文件if (!inFile){cerr << "error:can not open input file" << fileName << endl;return -1;}get(inFile);return 0;
}
get.cpp
#include "get.h"std::istream& get(std::istream &in)//8.3
{int ival;while (in >> ival, !in.eof())//让in.eof()决定是否结束,ctrl+z结束输入{if (in.bad())//巨大错误throw std::runtime_error("IO stream error");if (in.fail())//判断输入类型是否相同{std::cerr << "bad data,try again." << std::endl; //std名称空间in.clear();//恢复流到正常状态in.ignore(200,'\n');//continue;}std::cout << "输入的数据: " << ival << std::endl;}in.clear();//恢复流到正常状态
}
get.h
//#pragma once
#ifndef _GET_H
#define _GET_H//头文件不要用using namesapce std;
#include <iostream>
std::istream& get(std::istream &in);#endif
利用流对象把文件内容读取到向量并显示。
/*ca75b_c++_txwtech*/#include <iostream>
#include <fstream>
#include <string>
#include <vector>using namespace std;
//文件名的内容放在向量里面int fileToVector(string fileName, vector<string> & svec) //习题8.9,一次读取一行
{ifstream inFile(fileName.c_str());//打开fileName的文件if (!inFile)return 1;string s;while (getline(inFile, s))//一次读取一行,放在s里面svec.push_back(s);//s字符串又放在vector向量里面inFile.close();//关闭流对象if (inFile.eof())//读取到文件末尾return 4;//正常返回if (inFile.bad())return 2;//系统重大故障if (inFile.fail())return 3;//输入字符串,但收入的数字之类的错误。}
int fileToVector1(string fileName, vector<string> & svec) //习题8.10,一次输入一个单词
{ifstream inFile(fileName.c_str());//打开fileName的文件if (!inFile)return 1;string s;//while (getline(inFile, s))//一次读取一行,放在s里面while(inFile>>s) //>>流输入操作符,一个一个的单词读取,空格作为单词分割的标志svec.push_back(s);//s字符串又放在vector向量里面inFile.close();//关闭流对象if (inFile.eof())//读取到文件末尾return 4;//正常返回if (inFile.bad())return 2;//系统重大故障if (inFile.fail())return 3;//输入字符串,但收入的数字之类的错误。}int main() //8.9
{vector<string> svec;string fileName, s;cout << "输入文件名: " << endl;cin >> fileName;//switch (fileToVector(fileName, svec)) //调用读取一行switch (fileToVector1(fileName, svec)) //读取单词一个一个读取{case 1:cout << "error:can not open file: " << fileName << endl;//break;return -1;case 2:cout << "系统出错了" << endl;return -1;case 3:cout << "输入数据类型不匹配的错误。" << endl;return -1;}cout << "向量的内容: " << endl;for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)cout << *iter << endl;//cout << "文件名有多少行呢》:" << svec.size() << endl;cout << "文件有多少个单词呢:" << svec.size() << endl;return 0;}