如何在提示输入时候检查只有ENTER键按下的错误
下面代码要求在终端输入文件名,如果输入错误,则有异常提示,并要求第二次输入,直到输入正确,然后把文件里面的内容在终端显示出来。如果在提示输入文件名的时候,只按ENTER键,不按其他任何键,这当然是一种异常,但这时会让程序进入死循环,请问如何解决。#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
char c, str[256]="";
ifstream file;
while(true)
{
// bitmask设置异常
file.exceptions(ios::badbit|ios::failbit|ios::eofbit);
cout << "Enter the name of an existing text file: " << endl;
cin.get(str,256);
try
{
file.open (str);
cout << str << " is open for displaying content.\n";
// 重置异常,避免读到文件最末尾时候出现的failbit 或 eofbit 异常而跳到
// catch 代码区。windows机器上读过文件最末尾的bitmask为十进位6,也就是
// failbit 逻辑或 eofbit,所以,新的file.exceptions不认为上述值为异常。
file.exceptions(ios::badbit);
while((c=file.get())!=EOF)
{
cout << c;
}
file.close();
cout << str << " is closed.\n";
// 终止循环
break;
}
catch (const ios::failure& e)
{
cout << e.what()<<" Exception opening file"<<str<<".\n";
// 清除缓冲中的new line
cin.get();
// 重新把流状态归零(goodbit),为file对象下一次获取流(stream)准备。
file.clear();
}
}
return 0;
}
[ 本帖最后由 thenboo 于 2009-9-13 14:33 编辑 ]