-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具有块范围的变量,该变量将在第一个}. 自动对象的生命周期在它被声明的块的末尾结束。

于 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 声明为 int n ?只需将其更改为:

n = GetInt();

内部 n 的范围是直到 do 的 '}'。之后就再也没有使用过。循环外的 n 是使用的 n

于 2013-01-27T13:01:34.223 回答