如何用cin.fail()杀掉一个程序

时间:2017-11-30 03:25:59

标签: c++

所以我试图创建一个条件,这样如果用户输入除整数之外的任何内容,程序将终止。每当我说出字母A,程序重复输出零。我认为它的exit()就是问题,但当我替换它时,我遇到了同样的问题。建议?

#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
}

2 个答案:

答案 0 :(得分:2)

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

在大多数常见系统中,变量i将具有一些值,无论上次使用某个寄存器或内存时遗留的是什么。该值将是偶数或奇数。因此,如果fail恰好是零或正数,则永远不会达到if检查。

您可能希望重新排序cin支票,先检查i,如果提取成功则仅使用if startswith(stripped, "ren") & !startswith(stripped, "renvars") leftpad = " " ^ search("$ln", 'r') words = split(stripped, " ") varname = string(leftpad, " note ", words[3], ": ", words[2], " \n") print(varname) write(g, varname) end

答案 1 :(得分:1)

我想你的程序中的一些小调整可以为你解决问题:

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