0

错误是当我运行程序并键入n结束时选择它不会结束并不断重复第一个cout和默认值:

#include <iostream>
using namespace std;

int main()
{
    int x;
    float y,result=0,paid,change;
    do {
        cout<<"enter another choose or press (n/N) to end choosing ";
        cin>>x;
        switch (x)
        {
        case 1:
            {
                int a=5;    
                cout<<"enter the wighte you want in (Kg) : ";
                cin>>y;
                result=a*y;
                break;}
        default:
            cout<<"wrong choooose "<<endl;
        }

    }
    while (x='n');
    cout<<"your total= "<<result<<endl;
    cout<<"mony value paid = ";
    cin>>paid;
    change =paid-result;
    cout<<"the change = "<<change<<endl;
    return 0;
}
4

2 回答 2

2

抱歉,我完全错过了您在这里使用 C++ I/O。

您声明xint,但输入字符文字'n'。转换将因 C++ I/O 流而失败,因此x永远不会设置。不要混淆你的数据类型;如果您想阅读 achar然后阅读 a char,对于int.

尝试这样的事情:

int x = 0;
do {
    if(!(cin >> x)) {
        cout << "enter a valid number" << endl;
        // clear fail flag
        cin.clear();      
        // consume newline
        cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); 
    } else {
        // your logic here
    }
} while( x != -1 );

while (x='n');

这不是比较,而是分配,'n'转换为整数时的字符将始终评估为true,因此您的循环永远不会结束。

您的下一个问题是您想在输入 'n'时退出循环,而不是相反,所以它应该是......

while(x != 'n');

还要意识到,如果用户输入110,循环将退出。 xint,字符文字的整数'n'值为110。它也将失败'N'

于 2013-01-04T21:31:09.293 回答
2

问题在于它x是一个integer,然后您将其与字符文字进行比较。

这在使用旧的 C 风格标准 I/O 时效果很好,它使用int而不是char,但在类型不同的 C++ 中不起作用。这意味着输入就行了

cin>>x;

如果您没有输入有效的整数,将会失败。

更改xto的类型,char它应该可以工作。

还有赋值的问题,而不是里面的条件while

于 2013-01-04T21:29:29.850 回答