C++ 什么会使ios::fail()计算为1?
我正在尝试用打开一个文件C++ 什么会使ios::fail()计算为1?,c++,linux,fstream,C++,Linux,Fstream,我正在尝试用打开一个文件 27 string tline; 28 ifstream finp; // input file 29 ifstream dinp; // data files 30 31 finp.open(argv[1]); 32 33 34 cout << "finp.good() = " << finp.good() << endl; 35 cout << "finp.bad() = " <&l
27 string tline;
28 ifstream finp; // input file
29 ifstream dinp; // data files
30
31 finp.open(argv[1]);
32
33
34 cout << "finp.good() = " << finp.good() << endl;
35 cout << "finp.bad() = " << finp.bad() << endl;
36 cout << "finp.fail() = " << finp.fail() << endl;
现在,除了这是一个内部逻辑问题之外,我找不到任何关于什么会导致这种情况的好文档。我该怎么做才能纠正这个问题
如果有帮助的话,我在linux上运行,需要同时包含
和
,而在OSX上运行时不必这样做。这可能是问题所在吗?如果是,我该如何更正它?fail()
在尝试转换失败时将返回1。例如,如果文件中的下一个字符不是数字,并且您尝试读取int
,则将设置failbit,并且fail()
将返回1。当您已经在文件末尾时尝试的任何转换也将设置failbit
如果设置了badbit
,则fail()
也将返回1。这表示文件本身存在严重问题,而不仅仅是无法从文件中读取某些特定数据。fail()
在尝试转换失败时将返回1。例如,如果文件中的下一个字符不是数字,并且您尝试读取int
,则将设置failbit,并且fail()
将返回1。当您已经在文件末尾时尝试的任何转换也将设置failbit
如果设置了
badbit
,则fail()
也将返回1。这表明文件本身存在严重问题,而不仅仅是无法从文件中读取某些特定数据。请原谅,我犯了一个简单的错误。当我将源文件移植到linux系统时,我也移植了一个脚本。我把可执行文件和脚本搞混了,脚本中有一个硬编码的文件名,它不在目录中
基本上,我是无意中试图读取一个不存在的文件 请原谅,我犯了一个简单的错误。当我将源文件移植到linux系统时,我也移植了一个脚本。我把可执行文件和脚本搞混了,脚本中有一个硬编码的文件名,它不在目录中 基本上,我是无意中试图读取一个不存在的文件
finp.good() = 0
finp.bad() = 0
finp.fail() = 1