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

問題は、それxintegerであり、それを文字リテラルと比較することです。

これは、int代わりにを使用する古い C スタイルの標準 I/O を使用する場合にcharうまく機能しますが、型が異なる C++ では機能しません。これは、ライン上の入力が

cin>>x;

有効な整数を入力しないと失敗します。

のタイプをに変更するxchar、動作するはずです。

内部の条件ではなく、代入にも問題がありますwhile

于 2013-01-04T21:29:29.850 に答える
2

申し訳ありませんが、ここで C++ I/O を使用していることを完全に見逃していました。

xとして宣言しintますが、文字リテラルを入力します'n'。C++ I/O ストリームでは変換が失敗するため、x設定されません。データ型を混同しないでください。a を読みたい場合は acharを読み、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と、ループが終了することにも注意してください。 xは でintあり、文字リテラルの整数値'n'は です110。も失敗し'N'ます。

于 2013-01-04T21:31:09.293 に答える