-2
#include <stdio.h>
#include <cs50.h>

int main (void)
{
        printf("Welcome to blabla\n");


// This next part gets user input and checks if the integer given by user is between 1 and 8

        int n;
        do
        {
            printf("Give me a integer between 1 and 8.\n");
            int n = GetInt();
        }
        while (n >= 1 && n <= 8);

        printf("You picked the number %d.\n", n);   

        return(0);
}
4

4 に答える 4

4

変化する

int n = GetInt();

n = GetInt();

n最初の変数の後に破棄されるブロックスコープを持つ2番目の変数を導入していました}。自動オブジェクトの存続期間は、宣言されたブロックの終わりで終了します。

于 2013-01-27T13:00:22.027 に答える
2

nループ内で再宣言しているため、外部宣言は使用されません。それはおそらくあなたが望むものではありません。

交換

int n = GetInt();

と:

n = GetInt();
于 2013-01-27T13:00:37.663 に答える
2

この行:

int n = GetInt();

新しいローカル変数を宣言しようとしますn。これは、前に宣言したローカル変数とは完全に別のものです。

int n;

を呼び出すときは、次のように、既存の変数にGetInt()値を割り当てるだけです。

n = GetInt();
于 2013-01-27T13:00:41.823 に答える
0

なぜdo{}内でnをintnとして宣言するのですか?次のように変更するだけです:

n = GetInt();

内側のnのスコープは、doの「}」までです。その後は使用されませんでした。ループの外側のnは使用されるnです

于 2013-01-27T13:01:34.223 に答える