我有一个程序,我需要接受一个命令行参数,它是一个文本文件的名称。该程序由./programName file1运行。如果出于我的程序的目的,我可以假设file1将始终正确格式化,我可以这样做吗
ifstream myFile(argv[1]);
if(!myFile.good()){
cout << "Not a valid player file" << endl;
return 1;
}
检查是否有这样的文件,然后只需
myFile >> var1;
myFile >> var2;
myFile.close();
或者我应该坚持
if(myFile.is_open()){
myFile >> var1;
myFile >> var2;
myFile.close();
}
else{
cout << "Unable to open file";
}
我再次假设文件将始终正确格式化(即myFile&gt;&gt; var#将始终有效)。那么在我初次检查else
之后是否有可能调用(!myFile.good())
语句的情况呢?
答案 0 :(得分:3)
您应该主要检查输入操作,以了解您的文件是否具有正确的输入格式:
if(myFile >> var1 >> var2) {
// Everything's fine
}
else {
// WRONG FORMAT OR COULDN'T BE OPENED!
}
要了解else
部分中的实际错误原因,您可以检查iostate
函数返回的std::istream::rdstate()
标记。
如果open()
失败,badbit
将被设置,如果其中一个输入操作失败,则failbit
将被设置。