0

C++ を学習しており、基本的な電卓アプリを作成してみました。目標は、ユーザーから 0 ~ 9 の 2 つの数字と、数学演算 (+、-、​​、/) を取得することです。他の文字が入力された場合は、プログラムをループして、適切な入力を求め続ける必要があります。

しかし、プログラムを実行すると、0 ~ 9 の数字が認識されず、ループが繰り返されます。私が使っている主な機能はこの3つです。メインから呼び出しているだけなので、そこに問題があるとは思えません。助けてください?

ああ、go-to を使うべきではないことはわかっていますが、練習したかったのです。そして、このコードをより効率的に記述する方法を指摘できれば、それは素晴らしいことです。どうもありがとう。

int GetUserInput(){
using namespace std;
cout << "Please enter a number between 0-9." << endl;

char inputChar; 
cin >> inputChar;

while (inputChar != ('1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || '0')) {
    cout << "Please enter a number between 0-9." << endl;
    cin >> inputChar;
}

return static_cast <int> (inputChar);

}

char GetMathematicalOperation(){
using namespace std;
cout << "Please enter a mathematical operator (+, -, *, /)" << endl;

// Storing user input character into char inputChar
char inputChar; 

inputloop:
cin >> inputChar;
switch(inputChar) {
    case('+'):
    case('-'):
    case('*'):
    case('/'):
        break;
    default:
        cout << "Please enter a mathematical operator (+, -, *, /)" << endl;
        goto inputloop;
    }

return inputChar;

}

int CalculateResult(int x, char Operator, int y){
if (Operator = '+')
    return x+y;
if (Operator = '-')
    return x-y;
if (Operator = '*')
    return x*y;
if (Operator = '/')
    return x/y;
return 0;

}

4

7 に答える 7

1

C++ の場合

('1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || '0') == true

より具体的には、具体的でcharはない値 (文字ではなく値) を持つ a は、 or演算子と比較したときに に0評価されます。true==!=

だからあなたの表現

inputChar != ('1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || '0')

に等しい

inputChar != true

それらすべてcharsをコンテナーに入れて、ユーザー入力がコンテナーに存在するかどうかを確認することをお勧めします。

テストされていないコード

char mychars[] = {'1','2','3','4','5','6','7','8','9','0'};
std::set<char> inputChars;
inputChars.insert(mychars, mychars+10);

if(inputChars.find(inputChar) != inputChars.end())
{
...
}
于 2013-07-18T20:54:50.143 に答える
0

あなたの条件は間違っています...確認する必要があります (inputchar != '0') && (inputchar != '1') && ... && (inputchar != '9')

于 2013-07-18T21:02:44.837 に答える
0

別の解決策: if (std::string("0123456789").find(inputChar) != std::string::npos). 変数npos- 位置なし - が見つからないことを意味します。

于 2013-07-18T23:20:05.063 に答える