我试图抓住内置的cin函数,如cin.good()cin.fail()cin.ignore()cin.clear()等,但是下面的代码似乎有问题,它工作正常,但我评论的行不会在运行时提示符上显示。有人能指出我正确的方向吗? :/
使用namespace std;
void main()
{
int x = 0;
char y = 0;
int ch = 0;
do
{
cout << "Press 1 for int" << endl;
cout << "Press 2 for char" << endl;
cout << "Press 3 for exit" << endl;
cout << "enter choice = ";
cin >> ch;
if (ch == 1)
{
do
{
cout << "Enter an integer only = ";
cin >> x;
if (!cin.good())
{
cout << "Please enter integer only" << endl;
cin.clear();
cin.ignore(INT_MAX, '\n');
}
} while (cin.good() && x != 1);
}
else
if (ch == 2)
{
do
{
cout << "enter char only = ";
cin >> y;
if (cin.fail())
{ //the line below doesn't show up!
cout << "Please enter char only" << endl;
cin.clear();
cin.ignore(INT_MAX, '\n');
}
} while (!cin.fail() && y != 'e');
}
} while (ch != 3);
cout << "End of Program" << endl;
system("PAUSE"); // exit(1);
_getch();
}
答案 0 :(得分:1)
<强> cin.good()强>
如果流遇到诸如读取文件结尾,不存在的文件等问题,则返回0。否则为1
的 cin.bad()强>
如果流完全不可用,则返回非零值,例如,无法打开文件(但如果流只是到达文件的末尾则不会)
的 cin.fail()强>
如果最后一个cin命令失败则返回true,否则返回false
一个例子
int main() {
int i, j = 0;
while (1) {
i++;
cin >> j;
if (cin.fail()) return 0;
cout << "Integer " << i << ": " << j << endl;
}
} 现在假设你有一个文本文件--input.txt,它的内容是:
1 2 3 4 5 sahil 6 7
如果您将在上面执行短程序,则会产生如下结果:
整数1:1 整数2:2 整数3:3 整数4:4 整数5:5
它在读取第六个单词后退出后不会继续,因为它不是一个整数:cin.fail()成立。
cin.clear()和cin.ignore()
int age;
for (;;) {
cout << "Please enter your age: ";
if (cin >> age) {
break;
} else {
cout << "Please enter a valid integer age" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
参考this for use in file handling:
坏()
如果读取或写入操作失败,则返回true。例如,在 我们尝试写入一个未打开的文件的情况 或者如果我们尝试写的设备没有剩余空间。
失败()
在与bad()相同的情况下返回true,但在a的情况下也是如此 格式错误发生,就像提取字母字符时一样 当我们试图读取整数时。
EOF()
如果打开阅读的文件已到达结尾,则返回true。
良好()
它是最通用的状态标志:在相同的情况下它返回false 其中调用任何先前的函数将返回true。注意 好的和坏的并不完全相反(好的检查更多的状态 标志一次)。
成员函数clear()可用于重置状态标志。