1

我正在尝试编写将循环并将用户输入输入到类并打印出图表的代码。这是我的主要方法:

int main()
{
    Company productMatrix;
    int inputNumber = 0;
    cout << "enter the salesman id or -1 to quit." << endl;
    cin >> inputNumber;
    while(inputNumber != -1)
    {
        int salesman = inputNumber;
        cout << "enter the product id." << endl;
        cin >> inputNumber;
        int product = inputNumber;
         cout << "enter the amount sold." << endl;
        cin >> inputNumber;
        double dollarValue = inputNumber;
        productMatrix.inputSales(salesman, product, dollarValue);
        cout << "enter the salesman id or -1 to quit." << endl;
        cin >> inputNumber;
    }
    productMatrix.printChart();
    cout << "Goodbye!";
    return 0;
}

当我运行程序时,它会让我输入一组数据,然后永远循环,而无需等待我停止。这是它的样子:

enter the salesman id or -1 to quit.
3
enter the product id.
2
enter the amount sold.
55.99
enter the salesman id or -1 to quit.
enter the product id.
enter the amount sold.
enter the salesman id or -1 to quit.
enter the product id.
enter the amount sold.
// etc...

我猜我的循环有问题。我该如何解决这个问题?

4

4 回答 4

2

您正在将双精度数写入55.99整数,因此cin需要 55 并且它'.'在缓冲区中,该缓冲区始终!=-1但永远不会被读取为整数。

于 2013-06-09T22:59:06.980 回答
2

问题出在以下行。

double dollarValue = inputNumber;

inputNumber 是整数类型,美元值是浮点数。所以存在类型不匹配。您可以创建另一个变量,如 DollarInput 并将美元值存储在那里

于 2013-06-09T22:59:54.830 回答
0

inputNumber是一个int。但是您输入的值 (55.99) 不能解释为int. 这cin进入了错误状态。在清除错误之前,所有未来的操作都会cin失败。因此它不会等待您的输入,并且变量会保留它们的值,并且您永远无法知道-1循环需要终止。

要检查错误,只需使用普通的旧 if 语句:

if (cin) {
    // cin is okay
}
else {
    // cin is not okay
}

你也可以简洁一点,直接把你的输入操作放在一个if语句中:

if (cin >> inputNumber) {

要清除错误:

cin.clear();

您可能还需要清除输入流,否则错误的输入将保留在输入缓冲区中,并且cin会尝试再次读取它:

cin.ignore(); // discard one character from the input buffer
// or
cin.ignore(N); // discard N characters from the input buffer

无论如何,这就是无限循环的原因。但是,如果您只是直接输入 a double,而不是a int,您就不会看到这个问题。这不就是你想要的吗?

于 2013-06-09T22:59:08.763 回答
0

要添加到 prajmus 的答案,您可以通过添加以下“cin”读取来查看输入流中的附加“垃圾”:

...
double dollarValue = inputNumber;
productMatrix.inputSales(salesman, product, dollarValue);
cout << "enter the salesman id or -1 to quit." << endl;

double myDbl;
cin >> myDbl;
cout << "read the following double:" << myDbl << endl;
...

添加的“cin >> myDbl”将从输入流中读取“.99”,添加的 cout 将产生:

0.99
于 2013-06-09T23:41:41.103 回答