2017-09-19 16 views
-3

私は絶対初心者です。ちょうどC++を学び始めました。私たちは最近、switch文をクラスに入れました。私はスイッチステートメントを使用するパーソナリティテストタイプのプログラムを作ろうとしています。しかし、私はそれを正しく使用しているかどうかはわかりません。それは私の合計変数に追加することを拒否します。Switchステートメントは合計変数に加算されません

基本的には、私が選択したい回答に基づいてユーザー入力を1〜4持っており、その回答に基づいてポイントを集計したいと考えています。ここに私が持っているものがあります。 int inanswerは、 "1"または "4"が書き込まれる変数です。 int totalptsはこれまでの合計点です。

私は間違っていますか?

switch(inanswer){ 
    case '1': 
     totalpts += 1; 
     break; 
    case '2': 
     totalpts += 2; 
     break; 
    case '3': 
     totalpts += 3; 
     break; 
    case '4': 
     totalpts += 4; 
     break; 
} 
+1

プログラム全体のコードを見て良いだろう。そして、おそらく、 'default'ケースを持つことに役立つでしょう:' std:cerr << "無効な入力:" << inanswer << std :: endl; ' – user3151902

+0

@davidcsラベルは大文字小文字の代わりに大文字小文字のように見えます'1': –

答えて

0

変数 "inanswer"はintですか?あなたは文字の値に対してそれをテストしています。試してみてください。代わりに

case '1': 
    totalpts += 1; 
    break; 
case '2': 
    totalpts += 2; 
    break; 
    ... 
0
switch(inanswer){ 
    case 1: 
     totalpts += 1; 
     break; 
    case 2: 
     totalpts += 2; 
     break; 
    case 3: 
     totalpts += 3; 
     break; 
    case 4: 
     totalpts += 4; 
     break; 
} 

など
case 1: 
    totalpts += 1; 
    break; 
case 2: 
    totalpts += 2; 
    break; 

はこのようにそれを試してみてください。 私はinanswerがintであることを願っています。

0

あなたのユーザはキーボード上に文字を入力します(文字の意味する整数を計算することなく)。

その後

switch(inanswer){ 
    case '1': 
     totalpts += inanswer - '0'; 
     break; 
    ... etc. 

してみてください。そして、あなたは多分、switch文をリファクタリングすることができます

switch(inanswer){ 
    case '1': 
    case '2': 
    case '3': 
    case '4': totalpts += inanswer - '0'; break; 

    default: { 
     std::cerr << "user input out of range" << std::endl; 
     assert(0); 
    } 
} 
+0

これがなぜ機能するか:charsは暗黙的に必要な整数に変換されます(inanswerとリテラルの両方が '0'です)。 –

関連する問題