【解決方法】演算子が +、-、*、/ の場合、このコードは何も出力しないのはなぜですか


#include <iostream>

using namespace std;

int main()
{
    int a, b;
    char o;
    cout << "Enter the equation: ";
    cin >> a >> o >> b;
    if ((cin >> a) && (cin >> b)) {
        switch (o) {
            case '+': 
                cout << a << o << b << '=' << double(a) + double(b);
                break;
            case '-': cout << a << o << b << '=' << double(a) - double(b) << endl;
                break;    
            case '*': cout << a << o << b << '=' << double(a) * double(b) << endl;
                break;
            case '/': cout << a << o << b << '=' << double(a) / double(b) << endl;
                break;
            case '<':
                if (a < b) {
                    cout << a << o << b << " = T" << endl;
                }
                else {
                    cout << a << o << b << " = F" << endl;
                }
                break;
            case '>':
                if (a > b) {
                    cout << a << o << b << " = T" << endl;
                }
                else {
                    cout << a << o << b << " = F" << endl;
                }
                break;
            case '=':
                if (a == b) {
                    cout << '(' << a << " == " << b << ')' << " = T" << endl;
                }
                else {
                    cout << '(' << a << " == " << b << ')' << " = F" << endl;
                }
                break;
            default:
                cout << "Invalid operation." << endl;
                break;
        }
    }
    else {
        cout << "Invalid input." << endl;
    }

    return 0;
}

私が試したこと:

endlを削除し、ケースと同じ行にcoutを入れてみましたが、何も機能していないようです。操作と入力が有効な場合でも、コンソールはまだ何も出力しません

解決策 2

最初に注意することは、a と b の両方を 2 回読み取ろうとしていることです。
ここに一度:

char o;
cout << "Enter the equation: ";
cin >> a >> o >> b;

そしてその直後にここにあります:

if ((cin >> a) && (cin >> b)) {

したがって、実際に 1、演算子、b、そしてもう一度 a と b を入力しない限り、プログラムは 2 番目の入力セットを待ち続けることになります…値の妥当性をチェックしようとしているのではないかと思いますが、私はそうではありませんなぜそんなことをするのか知ってください!

を削除します。 ifelse そしてそれが機能し始めるかもしれません。

解決策 1

引用:

endlを削除し、ケースと同じ行にcoutを入れてみましたが、何も機能していないようです。操作と入力が有効な場合でも、コンソールはまだ何も出力しません

推測をやめて、確実に使用してください。 デバッガ そして何が起こっているのか見てみましょう。

C++
cin >> a >> o >> b;  // This reads 3 values
if ((cin >> a) && (cin >> b)) {
                   ^ this reads b again
     ^ this read a again

—–
コードが期待どおりに動作しないか、その理由がわかりません。

ほぼ普遍的な解決策があります。デバッガーでコードを段階的に実行し、変数を検査します。
デバッガーはコードが何を行っているかを示すためにここにあり、あなたのタスクはコードがすべきことと比較することです。
デバッガーには魔法はありません。デバッガーはコードが何をすべきか知りませんし、バグを見つけることもありません。何が起こっているかを示すことでバグを見つけるのを助けるだけです。 コードが期待どおりに動作しない場合、バグに近づいています。
コードの動作を確認するには: ブレークポイントを設定するだけで、コードの実行を確認できます。デバッガーを使用すると、1 行ずつ実行し、実行時に変数を検査できます。

何が問題なのかすぐに見つかるはずです。

デバッガー – フリー百科事典『ウィキペディア(Wikipedia)』[^]

Visual Studio 2010 でデバッグをマスターする – 初心者ガイド[^]
Visual Studio 2010 を使用した基本的なデバッグ – YouTube[^]

1.11 — プログラムのデバッグ (ステップとブレークポイント) | C++を学ぶ[^]

デバッガーは、コードが何を行っているかを表示することだけを目的としており、コードが行うべき動作と比較することがタスクです。

コメント

タイトルとURLをコピーしました