2 lixinzhi512 lixinzhi512 于 2015.05.27 16:13 提问

c++文件流相关问题,编译通过,但是结果为什么却报错?

源码如下,这是书上的一个习题:

#pragma warning(disable: 4786)
#include<map>
#include<set>
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

void initialize_exclusion_set(set<string>&);
void process_file(map<string,int>&,const set<string>&,ifstream&);
void user_query(const map<string,int>&);
void display_word_count(const map<string,int>&,ofstream&);

int main()
{
    ifstream ifile("E:\\vc\\column.txt");//这里哪出错了啊??
    ofstream ofile("E:\\vc\\column.map");//折腾了一下午,快疯了啊!
    if(! ifile||!ofile)
    {
        cerr<<"Unable to open file --bailing out!\n";
        return -1;
    }

    set<string>exclude_set;
    initialize_exclusion_set(exclude_set);
    map<string,int>word_count;
    process_file(word_count,exclude_set,ifile);
    user_query(word_count);
    display_word_count(word_count,ofile);
}

void initialize_exclusion_set(set<string>&exs)
{
    static string _exclude_words[25]={
        "the","and","but","that","then","are","been","can","a","could","did","for","of","had","have","him","his","her","its","is","were","which","when","with","would"
                                    };
    exs.insert(_exclude_words,_exclude_words+25);
}

void process_file(map<string,int>&word_count,const set<string>&exclude_set,ifstream &ifile)
{
    string word;
    while(ifile>>word)
    {
        if(exclude_set.count(word))
            continue;
        word_count[word]++;
    }
}

void user_query(const map<string,int>&word_map)
{
    string search_word;
    cout<<"Please enter a word to search:q to quit";
    cin>>search_word;
    while(search_word.size()&&search_word!="q")
    {
        map<string,int>::const_iterator it;
        if((it=word_map.find(search_word))!=word_map.end())
            cout<<"Found!"<<it->first<<"occurs"<<it->second<<"times."<<endl;
        else cout<<search_word<<"was not found in text."<<endl;
        cout<<"\nAnother search?(q to quit)";
        cin>>search_word;
    }
}

void display_word_count(const map<string,int>&word_map,ofstream &os)
{
    map<string,int>::const_iterator iter=word_map.begin(),end_it=word_map.end();
    while(iter!=end_it)
    {
        os<<iter->first<<"("<<iter->second<<")"<<endl;
        ++iter;
    }
    os<<endl;
}

小弟新手,第一次发帖,不知道问题出在哪里。所以发帖,希望能够得到你的帮助,先谢谢
问题描述:
1:代码可以正常编译通过,但是那个黑框框(是叫控制台吗?)却报错输出:Unable to open file --bailing out!(可是我已经在目录下创建了column.txt文件了啊,文件里面也有内容的)
2:我确定已经在E:\vc文件下面创建了column.txt文件。
3:还有一个信息不知道有没有用:奇怪的是,我把代码"E:\vc\column.txt")中的column改成text,却成功通过编译 运行结果也正常(之前学习输入输出流这一章节的时候,做过一个例题,是以text.txt命名的)
4:求助。。。

7个回答

Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.27 16:21

你忘了字符转义了。路径分隔符 \\ 要用 \\\\

lixinzhi512
lixinzhi512 回复Tiger_Zhao: 之前复制的代码走形了,现在插入代码片,可以正常显示了
2 年多之前 回复
lixinzhi512
lixinzhi512 我转义了的
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao 前面是一个 \,后面是两个 \。——问答的输入有时候会转义,有时候又不转义,:(
2 年多之前 回复
lixinzhi512
lixinzhi512   2015.05.27 16:24

不知道源码复制粘贴上去怎么变形了

lixinzhi512
lixinzhi512   2015.05.27 16:26

我转义了,用的两个斜杠,但是粘贴上去不知道为什么整个代码都变形了,

oyljerry
oyljerry   Ds   Rxr 2015.05.27 16:36

仔细检查文件路径,文件名等是否完全一致。

oyljerry
oyljerry 回复lixinzhi512: 你代码有没有重新编译
2 年多之前 回复
lixinzhi512
lixinzhi512 @问答导师帮帮我。。。
2 年多之前 回复
lixinzhi512
lixinzhi512 问题描述里的第三个问题,又是什么原因呢?文件名换成text.txt就正常运行了,是不是之前text.txt的例题没有.close()引起的呢,我百度了好久,然后也找到之前的例题,去.close(),没用。。。啊啊啊
2 年多之前 回复
lixinzhi512
lixinzhi512 源码粘贴好了,文件路径文件名我都查了一个下午了,一致的
2 年多之前 回复
wsh1992o
wsh1992o   Rxr 2015.05.27 16:48

编译通过说明你没有语法问题
没有出结果说明不是逻辑错误
那只能是运行时错误
看看是不是文件的读写属性的问题

lixinzhi512
lixinzhi512 属性没有问题啊,还有,我单单把代码里的column.txt改成text.txt,运行结果就正常了,输出结果:Please enter a word to search:q to quit
2 年多之前 回复
lixinzhi512
lixinzhi512   2015.05.27 17:11

不要沉啊啊啊啊啊。。。。。。

Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.27 17:19

你是不是创建 column.txt 的这个文本编辑器还开着?文件处于锁定状态。
用 unlocker 工具检查一下。

lixinzhi512
lixinzhi512 没有开着,关闭了的
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片