主题:求各位帮忙看一下我问的问题,关于 流 的,谢谢了~~
问题:下面这段程序的作用是:将文件中的每一行都存储在vector 容器的对象中,然后使用istringstream从vector中以每次读入一个单词的形式读取所存储的行
ps:1.我就是没搞明白,在主函数中的那个switch语句里,执行完fileToVector()函数之后,如果没出现错误,该函数返回给switch的参数是多少,switch语句又是怎么判断的
2.为什末要在fileToVector这个函数中判断是否出现了系统级等等那些错误
求大家说的详细些,万分感谢,谢谢了!!!!
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdlib> //用于暂停
//#include <cctype>
#include <vector>
//#include <cstring> //用于处理C风格字符串
//#include <bitset>
//#include <stack>
//#include <map>
#include<fstream>
#include<sstream>
//#include<algorithm>
//#define NDEBUG
using namespace std;
int fileToVector(string filename,vector<string>& svec)
{
//创建ifstream对象inFile并绑定到由形参fileName指定的文件中
ifstream inFile(filename.c_str());
//打开文件失败
if(!inFile)
return 1;
//将文件内容读入到string类型的vector容器,每一行存储为该容器对象的一个元素
string s;
while(getline(inFile,s))
{
svec.push_back(s);
}
inFile.close(); //关闭文件
if(inFile.eof()) //遇到文件结束符
return 4;
if(inFile.bad()) //发生系统级故障
return 2;
if(inFile.fail()) //读入数据失败
return 3;
}
int main()
{
vector<string> svec;
string fileName,s;
//读入文件名
cout<<"Enter filename:"<<endl;
cin>>fileName;
//处理文件
switch(fileToVector(fileName,svec))
{
case 1:
cout<<"error:can not to open file:"<<fileName<<endl;
return -1;
case 2:
cout<<"error:system failure"<<endl;
return -1;
case 3:
cout<<"error:read failure"<<endl;
return -1;
}
//使用istringstream从vector里以每次读一个单词的形式读取所存储的行
string word;
istringstream isstream;
for(vector<string>::iterator iter=svec.begin();iter!=svec.end();++iter)
{
//将容器对象的当前元素复制给istringstream对象
isstream.str(*iter);
//从istringstream对象中读取单词并输出
while(isstream>>word)
{
cout<<word<<endl;
}
isstream.clear();
}
system("pause"); //程序在此处停住,以便检查运行结果!
return 0;
}
ps:1.我就是没搞明白,在主函数中的那个switch语句里,执行完fileToVector()函数之后,如果没出现错误,该函数返回给switch的参数是多少,switch语句又是怎么判断的
2.为什末要在fileToVector这个函数中判断是否出现了系统级等等那些错误
求大家说的详细些,万分感谢,谢谢了!!!!
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdlib> //用于暂停
//#include <cctype>
#include <vector>
//#include <cstring> //用于处理C风格字符串
//#include <bitset>
//#include <stack>
//#include <map>
#include<fstream>
#include<sstream>
//#include<algorithm>
//#define NDEBUG
using namespace std;
int fileToVector(string filename,vector<string>& svec)
{
//创建ifstream对象inFile并绑定到由形参fileName指定的文件中
ifstream inFile(filename.c_str());
//打开文件失败
if(!inFile)
return 1;
//将文件内容读入到string类型的vector容器,每一行存储为该容器对象的一个元素
string s;
while(getline(inFile,s))
{
svec.push_back(s);
}
inFile.close(); //关闭文件
if(inFile.eof()) //遇到文件结束符
return 4;
if(inFile.bad()) //发生系统级故障
return 2;
if(inFile.fail()) //读入数据失败
return 3;
}
int main()
{
vector<string> svec;
string fileName,s;
//读入文件名
cout<<"Enter filename:"<<endl;
cin>>fileName;
//处理文件
switch(fileToVector(fileName,svec))
{
case 1:
cout<<"error:can not to open file:"<<fileName<<endl;
return -1;
case 2:
cout<<"error:system failure"<<endl;
return -1;
case 3:
cout<<"error:read failure"<<endl;
return -1;
}
//使用istringstream从vector里以每次读一个单词的形式读取所存储的行
string word;
istringstream isstream;
for(vector<string>::iterator iter=svec.begin();iter!=svec.end();++iter)
{
//将容器对象的当前元素复制给istringstream对象
isstream.str(*iter);
//从istringstream对象中读取单词并输出
while(isstream>>word)
{
cout<<word<<endl;
}
isstream.clear();
}
system("pause"); //程序在此处停住,以便检查运行结果!
return 0;
}