获取未使用的变量警告
Getting unused variable warning
我正在尝试编写一个程序,将 3 个整数作为输入,将这 3 个整数分配到一个数组中,然后按升序输出它们。我不知道为什么我的程序不工作,它说
unused variable 'array[]'
我也不知道为什么。我认为如果它通过 if 语句,它将以新顺序(正确的升序)创建数组。但是当我 运行 它时,它只输出我按顺序输入的 3 个整数。
int main(){
int num1 = 0;
int num2 = 0;
int num3 = 0;
scanf("%d %d %d", &num1, &num2, &num3);
char array[] = {num1, num2, num3};
int largestNum = numLarge(num1, num2, num3); //function gets largest number
if (num3 == largestNum){
if (num2 > num1){
char array[] = {num1, num2, num3};
}
else{
char array[] = {num2, num1, num3};
}
}
else if (num2 == largestNum){
if (num3 > num1){
char array[] = {num1, num3, num2};
}
else{
char array[] = {num3, num1, num2};
}
}
else if (num1 == largestNum){
if (num3 > num2){
char array[] = {num2, num3, num1};
}
else{
char array[] = {num3, num2, num1};
}
}
printf("%d ", array[0]);
printf("%d ", array[1]);
printf("%d", array[2]);
return 0;
}
But when I run it, it just outputs the 3 integers that I input in that order.
在您的代码中,在每个 if
和 else
块中,您正在重新创建一个局部 array[]
,其范围在 {}
的大括号内那个特定的 if
/else
块即 if(condition){//scope only here}
并且在大括号结束后你会留下初始的 array
因此你的输出总是作为原始顺序.
如何避免?
与其在每个 if
和 else
块中重新创建 array
,不如尝试适当地分配 num1
、num2
和 num3
我的意思不是像这样:
if (num3 == largestNum){
if (num2 > num1){
char array[] = {num1, num2, num3};
}
else{
char array[] = {num2, num1, num3};
}
做这样的事情:
if (num3 == largestNum){
if (num2 > num1){
array[0] = num1;
array[1] = num2;
array[2] = num3;
//you can avoid re-assigning here as there is no change of order
}
else{
array[0] = num2;
array[1] = num1;
array[2] = num3;
}
在 if-else 块中,您正在创建另一个与您在外部作用域中定义的数组同名的变量,从而将其隐藏。您所做的所有更改都是针对 if-else 中定义的本地数组,而不是您想要的。
你真正想要的是:
int main(){
int num1 = 0;
int num2 = 0;
int num3 = 0;
scanf("%d %d %d", &num1, &num2, &num3);
int array[] = {num1, num2, num3};
int largestNum = numLarge(num1, num2, num3); //function gets largest number
if (num3 == largestNum){
if (num2 > num1){
array[0] = num1;// This shoudl be num1 and so on.
array[1] = num2;
array[2] = num3;
}
else{
array[0] = num2;
array[1] = num1;
array[2] = num3;
}
}
else if (num2 == largestNum){
if (num3 > num1){
array[0] = num1;
array[1] = num3;
array[2] = num2;
}
else{
array[0] = num3;
array[1] = num1;
array[2] = num2;
}
}
else if (num1 == largestNum){
if (num3 > num2){
array[0] = num2;
array[1] = num3;
array[2] = num1;
}
else{
array[0] = num3;
array[1] = num2;
array[2] = num1;
}
}
printf("%d ", array[0]);
printf("%d ", array[1]);
printf("%d", array[2]);
return 0;
}
我正在尝试编写一个程序,将 3 个整数作为输入,将这 3 个整数分配到一个数组中,然后按升序输出它们。我不知道为什么我的程序不工作,它说
unused variable 'array[]'
我也不知道为什么。我认为如果它通过 if 语句,它将以新顺序(正确的升序)创建数组。但是当我 运行 它时,它只输出我按顺序输入的 3 个整数。
int main(){
int num1 = 0;
int num2 = 0;
int num3 = 0;
scanf("%d %d %d", &num1, &num2, &num3);
char array[] = {num1, num2, num3};
int largestNum = numLarge(num1, num2, num3); //function gets largest number
if (num3 == largestNum){
if (num2 > num1){
char array[] = {num1, num2, num3};
}
else{
char array[] = {num2, num1, num3};
}
}
else if (num2 == largestNum){
if (num3 > num1){
char array[] = {num1, num3, num2};
}
else{
char array[] = {num3, num1, num2};
}
}
else if (num1 == largestNum){
if (num3 > num2){
char array[] = {num2, num3, num1};
}
else{
char array[] = {num3, num2, num1};
}
}
printf("%d ", array[0]);
printf("%d ", array[1]);
printf("%d", array[2]);
return 0;
}
But when I run it, it just outputs the 3 integers that I input in that order.
在您的代码中,在每个 if
和 else
块中,您正在重新创建一个局部 array[]
,其范围在 {}
的大括号内那个特定的 if
/else
块即 if(condition){//scope only here}
并且在大括号结束后你会留下初始的 array
因此你的输出总是作为原始顺序.
如何避免?
与其在每个 if
和 else
块中重新创建 array
,不如尝试适当地分配 num1
、num2
和 num3
我的意思不是像这样:
if (num3 == largestNum){
if (num2 > num1){
char array[] = {num1, num2, num3};
}
else{
char array[] = {num2, num1, num3};
}
做这样的事情:
if (num3 == largestNum){
if (num2 > num1){
array[0] = num1;
array[1] = num2;
array[2] = num3;
//you can avoid re-assigning here as there is no change of order
}
else{
array[0] = num2;
array[1] = num1;
array[2] = num3;
}
在 if-else 块中,您正在创建另一个与您在外部作用域中定义的数组同名的变量,从而将其隐藏。您所做的所有更改都是针对 if-else 中定义的本地数组,而不是您想要的。
你真正想要的是:
int main(){
int num1 = 0;
int num2 = 0;
int num3 = 0;
scanf("%d %d %d", &num1, &num2, &num3);
int array[] = {num1, num2, num3};
int largestNum = numLarge(num1, num2, num3); //function gets largest number
if (num3 == largestNum){
if (num2 > num1){
array[0] = num1;// This shoudl be num1 and so on.
array[1] = num2;
array[2] = num3;
}
else{
array[0] = num2;
array[1] = num1;
array[2] = num3;
}
}
else if (num2 == largestNum){
if (num3 > num1){
array[0] = num1;
array[1] = num3;
array[2] = num2;
}
else{
array[0] = num3;
array[1] = num1;
array[2] = num2;
}
}
else if (num1 == largestNum){
if (num3 > num2){
array[0] = num2;
array[1] = num3;
array[2] = num1;
}
else{
array[0] = num3;
array[1] = num2;
array[2] = num1;
}
}
printf("%d ", array[0]);
printf("%d ", array[1]);
printf("%d", array[2]);
return 0;
}