C 为什么编译器给我错误未使用的变量n? #包括 #包括 内部主(空) { printf(“欢迎来到blabla\n”); //下一部分获取用户输入并检查用户给定的整数是否在1和8之间 int n; 做 { printf(“给我一个介于1和8之间的整数。\n”); int n=GetInt(); } 而(n>=1&&n

C 为什么编译器给我错误未使用的变量n? #包括 #包括 内部主(空) { printf(“欢迎来到blabla\n”); //下一部分获取用户输入并检查用户给定的整数是否在1和8之间 int n; 做 { printf(“给我一个介于1和8之间的整数。\n”); int n=GetInt(); } 而(n>=1&&n,c,scope,cs50,C,Scope,Cs50,变化 与 您引入了第二个具有块作用域的变量n,该变量将在第一个之后被丢弃。自动对象的生存期在声明它的块的末尾结束。您在循环内部重新声明n,因此不使用外部声明。这可能不是您想要的 替换 n = GetInt(); 与: 这一行: n = GetInt(); 尝试声明新的局部变量n。它与您先前声明的局部变量完全分离: int n = GetInt(); 调用GetInt()时,只需将值赋给现有变量,如下所示: int n; 为什么要在do{}中再次将n声明为int n?只需将其更改为: n

变化


您引入了第二个具有块作用域的变量
n
,该变量将在第一个
之后被丢弃
。自动对象的生存期在声明它的块的末尾结束。

您在循环内部重新声明
n
,因此不使用外部声明。这可能不是您想要的

替换

n = GetInt();
与:

这一行:

n = GetInt();
尝试声明新的局部变量
n
。它与您先前声明的局部变量完全分离:

int n = GetInt();
调用
GetInt()
时,只需将值赋给现有变量,如下所示:

int n;

为什么要在do{}中再次将n声明为int n?只需将其更改为:

n = GetInt();

内部n的作用域一直到do的“}”之后才被使用。循环外的n是使用过的n

您不使用内部n。这个概念称为scope。您应该在编译器调用中添加
-Wshadow
或等效的警告标志。这回答了如何修复它,但没有给出任何错误的指示H
int n = GetInt();
int n;
n = GetInt();
n = GetInt();