2

C++ を学ぼうとしていて、基本的な I/O 計算機を作成することにしました。2 回目の getUserInput() までは正常に動作し、その後は自動的に 0 を入力して終了します。何が起こっているのか理解できません!

#include <iostream>
using namespace std;

int getUserInput() {                                        // Get user numbers
    cout << "Enter a number: " << endl;
    int userInputNumber;
    cin >> userInputNumber;
    return userInputNumber;
}

char getUserOper() {                                        // Get user math operator
    cout << "Enter a math operator: " << endl;
    int userInputOper;
    cin >> userInputOper;
    return userInputOper;
}

int doMath(int x, char oper, int y) {                       // Does math based on provided operator
    if(oper=='+') {
        return x + y;
    }
    if(oper=='-') {
        return x - y;
    }
    if(oper=='*') {
        return x * y;
    }
    if(oper=='/') {
        return x / y;
    }
    else {
        return 0;
    }
}

void printResult(int endResult) {                           // Prints end result
    cout << endResult;
}

int main() {
    int userInputOne = getUserInput();
    char userOper = getUserOper();
    int userInputTwo = getUserInput();
    printResult(doMath(userInputOne, userOper, userInputTwo) );
}
4

4 に答える 4

3

getUserOper で char を使用する必要がある場合に int を使用する

char getUserOper() {                                        // Get user math operator
    cout << "Enter a math operator: " << endl;
    char userInputOper;
    cin >> userInputOper;
    return userInputOper;
}
于 2012-08-17T16:29:34.290 に答える
1
char getUserOper() {                                        // Get user math operator
        cout << "Enter a math operator: " << endl;
        char userInputOper;
        cin >> userInputOper;
        return userInputOper;
    }

intの代わりにcharを使用する必要があります。

于 2012-08-17T16:33:06.283 に答える
1

chargetUserOper でa を使用する

char getUserOper() {                                        // Get user math operator
        cout << "Enter a math operator: " << endl;
        char userInputOper;
        cin >> userInputOper;
        return userInputOper;
    }
于 2012-08-17T16:28:42.277 に答える
1

cin >> userInputOper を実行すると、\n はまだバッファ内にあり、2 回目に使用されます。無効な入力が存在し、未定義の動作が発生します。そうする

cin >> userInputOper; 
//cin.ignore(); // removes one char from the buffer in this case the '\n' from when you hit the enter key, however " " is a delimiter so if the user enters 23 54 only 23 gets entered and 54 remains in the buffer as well as the '\n' which will get used on the next call
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); // clears everything in the buffer
return userInputOper;

また、入力時のエラーをチェックする必要があります

int myInt;
while ( !(cin >> myInt) )
{
cout << "Bad input try again\n";
cin.clear();  // this only clears the fail state of the stream, doesn't remove any characters
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); // removes all chars from the buffer up to the '\n'
}
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

完全に必要というわけではありませんが、おそらく演算子に char を使用する必要があります。ユーザーが 255 文字より大きい数値を入力すると、問題が発生します。

于 2012-08-17T16:31:11.723 に答える