我正在尝试创建一个以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;
}
答案 0 :(得分:2)
但是当我运行它时,它只输出我按顺序输入的3个整数。
在您的代码中,您在每个if
和else
块中重新创建一个本地array[]
,其范围在该特定的大括号{}
内if
/ else
阻止,即if(condition){//scope only here}
,在大括号结束后,您将保留初始array
,因此您的输出始终为原始订单
如何避免?
不要在每个array
和if
块中重新创建else
,而是尝试分配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;
}
答案 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;
}