0

我刚开始使用 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

3 回答 3

2

当我更改notFivemain. 您的问题必须在此代码之外(可能是因为cin处于损坏状态,正如其他人所建议的那样)。

于 2013-03-18T19:14:28.703 回答
1

更改此行:

cin >> input

对此:

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

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

编辑:

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

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

也可以调用cin.clear();恢复工作状态cin

于 2013-03-18T19:16:21.660 回答
0

以下是我的评论:

  1. fflush(stdin)无效。stdin不能冲洗。此外,这可能与输入不同cin
  2. 您需要检查cin.failafter cin >> input。如果我输入一个字母,你的输入语句将失败。
于 2013-03-18T19:11:35.440 回答