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

 

posted @ 2020-02-11 19:37  txwtech  阅读(304)  评论(1编辑  收藏  举报