做同时切换错误

时间:2013-01-04 21:27:49

标签: c++ switch-statement do-while

错误是在我运行程序并输入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;
}

2 个答案:

答案 0 :(得分:2)

问题是x是一个整数,然后将其与字符文字进行比较。

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

cin>>x;
如果您没有输入有效的整数,

将失败。

x的类型更改为char,它应该有效。

分配问题而不是while内的条件。

答案 1 :(得分:2)

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

您将x声明为int,但输入字符文字'n'。转换将因C ++ I / O流而失败,因此永远不会设置x。不要混淆您的数据类型;如果您想阅读char,请阅读charint也一样。

尝试这样的事情:

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'也会失败。