布尔函数无法返回真或假

bool function failure to return true or false

本文关键字:返回 函数 布尔      更新时间:2023-10-16

我正在编写的类方法必须将单词存储到不同的数组中,但还必须返回文件是否已成功读入的布尔值。一切看起来都很好,但我找不到逻辑错误。

我正在读取的文件类型是这样的,其中空格由制表符分隔

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,不确定它来自哪里?

如果循环失败,您将缺少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;
}
}