挣扎与cin函数c++

struggling with cin function c++

本文关键字:c++ 函数 cin 挣扎      更新时间:2023-10-16

我试图掌握内置的cin函数,如cin.good() cin.fail() cin.ignore() cin.clear()等,但似乎有以下代码的问题,它工作得很好,但我已经注释的行没有显示在运行时提示符上。有人能给我指个正确的方向吗?:/

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();
}

cin.good()
如果流遇到诸如读取文件结尾、不存在的文件等问题,则返回0。
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

它不会在读取第5个值后继续,因为它在读取第6个单词后退出,因为它不是整数: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');
    }
}

在文件处理中使用:
坏()

如果读写操作失败,

返回true。例如,在当我们试图写入一个未打开的文件时或者如果我们尝试写入的设备没有剩余空间。

失败()

在与bad()相同的情况下返回true,但在a发生格式错误,例如提取字母字符时当我们试图读取一个整数时

eof ()

如果打开的文件读到末尾,返回true。

好()

是最通用的状态标志:在相同的情况下返回false其中调用前面的任何函数都将返回true。请注意好与坏并不是完全对立的(好检查更多的状态)

成员函数clear()可用于重置状态标志。