为什么会进入死循环呢?
#pragma warning ( disable: 4786 )
#include <iostream>
#include <string>
#include <fstream>
#include <map>
using namespace std;
map <string,double> probabilityMap;
//void InputProbability()
int main()
{
ofstream outputProbability;
string outputProbabilityFile( "copyOutputProbability.txt ");
ifstream inputProbability;
string inputProbabilityFile( "outProbabilityFile.txt ");
inputProbability.open ( inputProbabilityFile.c_str ());
if ( !inputProbability )
{
cerr < < "error: unable to open the input file! " < <endl;
return -1;
}
else
{
while ( !inputProbability.eof () )
{
string word;
if ( inputProbability > > word )
{//probabilityMap[word]++;
double num;
if ( inputProbability > > num )
{
probabilityMap[word] = num ;
}
}
}
//while ( )
inputProbability.close();
}
outputProbability.open(outputProbabilityFile.c_str ());
if ( !outputProbability )
{
cerr < < "unable to open output file! " < <endl;
return -2;
}
typedef map <string, double> ::iterator typeIter;
for ( typeIter it=probabilityMap.begin (); it!=probabilityMap.end (); ++it )
{
outputProbability < < (*it).first < < " " < < endl;//(*it).second < <endl;
}
outputProbability.close();
return 0;
}
[解决办法]
没看出来
UP
[解决办法]
这段有问题:
while ( !inputProbability.eof () )
{
string word;
if ( inputProbability > > word )
{//当文件中的格式不是 string double的时候,就会出错。
//出错时,这里就设置了标志位,就导致一直死循环;
//你的outProbabilityFile.txt文件格式
//肯定不是字符串 浮点数 .....的格式
double num;
if ( inputProbability > > num )
{
probabilityMap[word] = num ;
}
}
}
inputProbability.close();
}
可以改成如下就不会死循环了,只是个变通的办法:
while ( !inputProbability.eof () )
{
string word;
if(inputProbability.fail())
inputProbability.clear();
if ( inputProbability > > word )
{//probabilityMap[word]++;
double num;
if ( inputProbability > > num )
{
probabilityMap[word] = num ;
}
}
}
//while ( )
inputProbability.close();
}
[解决办法]
没问题。
outProbabilityFile
本 23
传真 14
回复 32
解说 12
如果 10
商 20
商品 40
市 21
我 18
我们 14
一 14
在 10
主要 43
自 14
◆ 17
24
├ 36
回 13
价 21
件 18
扣 21
络 20
如果 26
商品 14
现 100
原 96
、 11157
。 10188
447
— 181
—— 373
——— 16
输出copyOutputProbability
商
商品
市
我
我们
一
在
主要
自
◆
├
回
价
件
扣
络
如果
商品
现
原
、
。
—
——
———
本
传真
回复
解说
如果
[解决办法]
建议你用个buffer先装文件中的内容 再取出来比较word
[解决办法]
、
。
—
——
———
◆
├
本
传真
回
回复
价
件
解说
扣
络
如果
商
商品
市
我
我们
现
一
原
在
主要
自
[解决办法]
当读入的类型和文件流中的类型不符时,就会给文件流设置了标志位,当设置错误标志后,就不在继续从文件流中读数据了,所以,永远也读不到inputProbability.eof ()这个条件满足的时候,所以就出现了死循环!
[解决办法]
如果你输入的字符中间不小心有其他字符呢?例如: 国信 培训 23。
请仔细检查一下你的文件格式。你也可以跟踪一下程序.
if(inputProbability.fail())
inputProbability.clear();//这里可以设置一个断点,当这句执行的时候,就是你读入出错了。