布尔函数无法返回真或假
bool function failure to return true or false
我正在编写的类方法必须将单词存储到不同的数组中,但还必须返回文件是否已成功读入的布尔值。一切看起来都很好,但我找不到逻辑错误。
我正在读取的文件类型是这样的,其中空格由制表符分隔
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;
}
}
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 接收和返回函数指针的函数指针的类型?
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- C++函数链返回函数
- 返回函数指针的函数的签名
- 由于值返回函数中的错误,程序无法编译.它说未声明的标识符
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 如何在 C++ 中从 void 返回函数访问变量
- 返回函数中带有 2 个可选 ctor 的对象
- 如何在 c++ 中返回函数的结构向量
- 返回 C++ 函数中的引用
- 使用向量时,当返回函数更改时,无法看到输出
- 如何在递归中使用返回函数
- 返回函数模板的类型C++作为第二个模板参数
- 为什么静态指针返回函数中有一个"静态"键?
- 递归返回函数,在特殊情况下不返回
- 从类返回函数
- 从类成员函数返回函数指针
- 从返回函数中推断不存在的模板参数