什么时候应该对流使用fail函数?

问题描述 投票:0回答:1

对于我的程序,我应该读取文件“ sales.txt”,其中包含销售人员的姓名和销售金额。该文件按字母顺序排序,这样,如果一个人进行了多次销售,他们的名字就会与相应的美元金额连续出现。然后,我应该打印每个销售员的总销售额。但是我的问题是:什么时候应该同时对fin和fout使用fail函数?

if(fin.fail())
{ cout << "Error \n";
  exit(1);
} 

我在网上阅读的该说明性pdf文件说,您永远不要以为打开文件是成功的,因此,在继续操作之前,应始终测试文件是否成功。但是,针对此示例问题提供的答案不包括故障功能。另外,exit(1)到底能做什么?

c++ io fstream
1个回答
0
投票

失败

std :: ios :: fail检查是否设置了故障位或故障位如果为流设置了故障位或故障位错误状态标志(或两者),则返回true。当输入操作期间发生错误时,将至少设置这些标志之一。

故障位通常由操作设置,当错误与操作本身的内部逻辑有关时;在流上可能有进一步的操作。

Source

也请查看此表enter image description here

如果查看“检查状态标志的功能”下的fail()列,则会看到fail()在2种情况下返回true:

  1. I / O操作中的逻辑错误
  2. I / O操作的读/写错误(您的情况)

基本上,检查它是否可以打开/写入提供的文件。如果不能,则返回true,并执行您的if语句。


退出

对于exit,它只是终止程序。

如果状态为零或EXIT_SUCCESS,则将成功的终止状态返回到主机环境。如果状态为EXIT_FAILURE,则会将失败的终止状态返回到主机环境。

这是Linux中的示例:

exit

在外壳中使用//test.cpp #include <iostream> int main() { //exit (EXIT_FAILURE); std::exit (0); } 获取最后的返回代码

$?

现在尝试使用user: echo $? output: 0

EXIT_FAILURE
#include <iostream>
int main()
{
   std::exit (EXIT_FAILURE);
}

因此,简而言之,它允许您在读取该行代码时退出程序,并选择返回0(正常退出)或1(返回1通常表示程序因错误而终止)。

© www.soinside.com 2019 - 2024. All rights reserved.