所以我正在制作这个简单的排序算法,它将数组中的数字按升序排列。
这就是我的代码现在的样子:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x,smallest,z,n,count;
int * numbers = NULL;
printf("Sisestage arvude hulk: ");
scanf("%d",&n);
numbers = malloc(sizeof(int)*n);
if(numbers==NULL){
return -1;
}
for(count=0;count<n;count++){
printf("Arv %d: ",count+1);
scanf("%d",&numbers[count]);
}
smallest = numbers[0];
for(count=0;count<n;count++){
printf("Number %d Index %d\n",numbers[count],count);
if(numbers[count]<smallest)
smallest = numbers[count];
z = count;
}
/*numbers[0] = smallest;
numbers[z] = x;*/
printf("Smallest: %d, It's index: %d Array size: %d\n",smallest,z,n);
}
这里的问题是程序完成后,由于某种原因,z =数组中的最后一个索引。 z = count在if语句中,应该可以帮助这种事情不会发生,但它仍然存在。这是为什么?
答案 0 :(得分:6)
您忘了将if-block括在括号中:
if(numbers[count]<smallest) {
smallest = numbers[count];
z = count;
}
因此,在您的情况下,z = count
总是执行。
此外,如果第一个元素z
碰巧是最小的,numbers[0]
未初始化,
因此你应该用
smallest = numbers[0];
z = 0;
答案 1 :(得分:1)
如果您有多个语句,则需要使用{}
括号if
。
那应该解决它。
解决方案:
if(numbers[count]<smallest) {
smallest = numbers[count];
z = count; }
答案 2 :(得分:1)
if(numbers[count]<smallest)
smallest = numbers[count];
z = count;
与:
相同if(numbers[count]<smallest)
{
smallest = numbers[count];
}
z = count;
所以这是一个括号问题