-1

電卓アプリケーションを作成しています。if ステートメントで設定した変数を呼び出すことができるかどうかを確認したいと思います。if ステートメントが終了した後。私はそれを行うことができますか?私はいくつかのことを試しましたが、うまくいきません。

int main()
{
    // ...
    int finished;
    do{
        // ...           
        if(operator == 1){
            int finished = number[1] + number[2];
            printf("\n\n%d \+ %d is: %d", number[1], number[2], finished);

        }
        if(operator == 2){
            int finished = number[1] - number[2];
            printf("\n\n%d \- %d is: %d", number[1], number[2], finished);

        }
        // ...
        printf("\ndebug %d\n: ", finished);
        // ...
    } while (doAgain == 1);
    return 0;
}
4

3 に答える 3

5

いいえ、変数のスコープは次の{ }ペアの終わりまでです。

ここでアクセスする必要がある場合はint finished;、上部で定義する必要があります (既に行っていること)。

int finished = ...に置き換えるだけfinished = ...です。これは、新しい変数を定義する代わりに、既存の変数を書き込むだけです。

于 2013-06-28T07:04:49.080 に答える
2

いいえ、スコープ外になった変数にアクセスすることはできません。

新しい変数を追加する必要があります。

int fin;

if (...) {
    int finished;
    fin = finished;
}

fin; // still accessible. but finished no longer exists.

または、内部変数から宣言を削除して、よりスコープの広いものが使用されるようにします。

int finished;

if (...) {
    finished = ...;
}

finished; // still accessible, of course.
于 2013-06-28T07:02:47.053 に答える
2

C およびほとんどすべてのプログラミング言語では、変数に関連するものとして、可視性の領域 (スコープ) と生命の領域の 2 つがあります。あなたの質問は最初のものをカバーしています。

C では、ルールは単純です。

  • グローバル変数は、現在のコンパイル単位のどこにでも表示されます
  • {ローカル変数は、囲んでいる..}スコープでのみ表示されます

あなたの場合、ブランチで を再定義してはいけませfinishedif

于 2013-06-28T07:07:29.353 に答える