与cin函数c ++斗争

时间:2014-03-23 08:48:00

标签: c++

我试图抓住内置的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();

}

1 个答案:

答案 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()可用于重置状态标志。