C ++输入未被读取

时间:2013-03-18 19:05:54

标签: c++ input cin

我刚开始用c ++(来自java),我正在尝试做一些基本的练习。想法是要求除5以外的任何输入,如果用户输入5,显示消息,并且如果用户输入除了5次以外的任何内容,则显示另一个消息。这是代码:

void notFive () {
    int count = 0;
    while (count < 10) {
        int input = 0;
        cout << "Enter any number other than 5." << endl;
        cin >> input;
        if (input == 5)
            break;
        count++;
    }
    if (count == 10)
        cout<<"You are more patient than I am, you win.";
    else
        cout << "You weren't supposed to enter 5!";
}   
}

我的问题是所有这些代码都打印出来“输入5以外的任何数字” 10次​​,然后说“你更耐心,我赢了。”任何想法有什么不对?

如果你们想要我所有的代码(以确保我不只是一个白痴),这里是:

#include <iostream>
#include <stdio.h>
using namespace std;

class Hello {

public:
    void notFive () {
        int count = 0;
        while (count < 10) {
        int input = 0;
        cout << "Enter any number other than 5." << endl;
        if ( ! (cin >> input) ) {
            cout << "std::cin is in a bad state!  Aborting!" << endl;
            return;
}
        if (input == 5)
            break;
        count++;
        }
        if (count == 10)
            cout<<"You are more patient than I am, you win.";
        else
            cout << "You weren't supposed to enter 5!";
    }   
}hello;

int main() {
    Hello h;
    h.notFive();
    return 0;
}

4 个答案:

答案 0 :(得分:2)

当我将notFive更改为main时,您的代码(在Visual Studio 2012中)非常适合我。您的问题必须在此代码之外(可能是因为cin处于破坏状态,正如其他人所建议的那样)。

答案 1 :(得分:1)

更改此行:

cin >> input

对此:

if ( ! (cin >> input) ) {
    cout << "std::cin is in a bad state!  Aborting!" << endl;
    return;
}

您描述的行为是在运行此代码之前,如果发生了错误发生在cin 上会发生什么。

修改

将相同的代码添加到cin的早期使用中,以找出它进入错误状态的位置。

这种情况的一个例子是,如果代码尝试读取int,并且用户输入了字母表中的字母。

您也可以致电cin.clear();恢复cin的工作状态。

答案 2 :(得分:0)

以下是我的评论:

  1. fflush(stdin)无效。 stdin无法刷新。也, 这可能与cin的输入不同。
  2. 您需要在cin.fail之后检查cin >> input。如果我进入 信,你的输入声明将失败。

答案 3 :(得分:-1)

当然应该是

   if (input != 5)
        break;

我认为你的逻辑是错误的。