首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么会进入死循环呢?该如何处理

2012-03-04 
为什么会进入死循环呢?#pragmawarning(disable:4786)#include iostream#include string#include fstr

为什么会进入死循环呢?
#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();//这里可以设置一个断点,当这句执行的时候,就是你读入出错了。

热点排行