如何使用CIN.FAIL()杀死程序

How to kill off a program with cin.fail()

本文关键字:程序 何使用 CIN FAIL      更新时间:2023-10-16

因此,我正在尝试制定条件,以便用户输入除整数以外的任何内容,程序将终止。每当我认为字母A时,程序反复输出零。我认为它的退出()就是问题,但是当我替代它时,我也有同样的问题。建议?

#include <iostream>
#include <cctype>
#include <cstdlib>

using namespace std;
void even(int);
void odd(int);
int main()
{
    int i;
    do{
        cout << "Enter an integer" << endl;
        cin >> i;
        if(i % 2 == 0)
            even(i);
        else if (i % 2 == 1)
            odd(i);
        else if (cin.fail())
            exit (0);
    }while(!isdigit(i));
    return (0);
}
void even(int i)
{
    cout << i << endl;
}
void odd (int i)
{
    //nothing here
}

如果cin >> i失败,则未分配变量i。在您的程序中,这意味着它仍然具有不确定的值。使用不确定的值如(i % 2 == 0)中的不确定行为,这意味着就C 标准而言,任何事情都可能发生。

在大多数常见的系统上,变量i将具有一定的值,从上一次使用某些寄存器或内存的剩余内容。这个值是偶数或奇怪的。因此,如果i恰好为零或阳性,您的fail检查将永远无法达到。

您可能要先重新排序if检查以检查cin,并且仅在提取成功的情况下仅使用i

我想您的程序中的一些调整应该为您解决问题:

if (cin.fail())
            exit (0);
        else if(i % 2 == 0)
            even(i);
        else if (i % 2 == 1)
            odd(i);