我正在编写的类方法必须将单词存储到不同的数组中,但还必须返回一个布尔值,表示文件是否已成功读入。一切看起来都很好,但我找不到逻辑错误。
我正在阅读的文件类型,其中空格由标签分隔
misspelledword correctword
misspelledword2 correctword2
misspelledword3 correctword3
但格式也可以像这样
misspelledword correctword correctword correctword
这是我的代码
bool SpellChecker::loadFile(string filename)
{
ifstream ifile;
ifile.open(filename.c_str());
if (ifile.fail())
{
cout << "Error opening file" << endl;
return false;
}
string line;
int count = 0;
while (getline(ifile, line))
{
istringstream iss(line);
getline (iss, misspelled[count], '\t');
getline (iss, correct[count]);
count++;
}
if (ifile.good())
{
return true;
}
ifile.close();
}
不确定为什么它不应该返回false或true但是它返回一个随机数17,不知道它来自哪里?
答案 0 :(得分:0)
如果循环失败,则缺少return
语句,因此返回值将是未定义的。编译器应该已经警告过你。
此外,如果已达到EOF,good()
将返回false。因此,您需要检查eof()
和/或!fail()
而不是good()
。
尝试更像这样的事情:
bool SpellChecker::loadFile(string filename)
{
ifstream ifile(filename.c_str());
if (!ifile)
{
cout << "Error opening file" << endl;
return false;
}
string line;
int count = 0;
while (getline(ifile, line))
{
istringstream iss(line);
getline(iss, misspelled[count], '\t');
getline(iss, correct[count]);
++count;
}
return ifile.eof() && !ifile.fail();
// or simply:
// return (bool) ifile;
}
或者,在I / O错误上启用异常处理:
bool SpellChecker::loadFile(string filename)
{
ifstream ifile;
string line;
int count = 0;
ifile.exceptions(std::ifstream::badbit | std::ifstream::failbit);
try
{
ifile.open(filename.c_str());
while (getline(ifile, line))
{
istringstream iss(line);
getline(iss, misspelled[count], '\t');
getline(iss, correct[count]);
++count;
}
return true;
}
catch (const std::ios_base::failure &)
{
cout << "Error opening or loading file" << endl;
return false;
}
}