回 帖 发 新 帖 刷新版面

主题:求各位帮忙看一下我问的问题,关于 流 的,谢谢了~~

问题:下面这段程序的作用是:将文件中的每一行都存储在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;
}

回复列表 (共2个回复)

沙发

1、如果正确的读取了文件的全部内容,最终会遇到文件结束符(也就是EOF),此时inFile.eof()成立,返回4。换句话说,如果没出现错误,返回值是4。当然,这个函数的写法不够好,函数最后肯定要写一个return的,否则一些编译器会有警告。
2、我也想不到为什么要判断系统级别的错误……从道理上讲,读取文件时有可能出现错误(比如文件损坏、硬盘故障,等等)。可能是指这些错误吧,我猜是这样的。

板凳

谢谢了,我自己又想了想,整明白了~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册