获取未使用的变量警告

时间:2016-10-23 17:33:25

标签: c arrays gcc-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;
}

2 个答案:

答案 0 :(得分:2)

  

但是当我运行它时,它只输出我按顺序输入的3个整数。

在您的代码中,您在每个ifelse块中重新创建一个本地array[],其范围在该特定的大括号{}if / else阻止,即if(condition){//scope only here},在大括号结束后,您将保留初始array,因此您的输出始终为原始订单

如何避免?

不要在每个arrayif块中重新创建else,而是尝试分配num1num2&适当地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;
    }

答案 1 :(得分:1)

在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;
}