C - 索引问题

Ves*_*ske 2 c

所以我正在制作这个简单的排序算法,将数字放在一个数组中以升序排列.

这就是我的代码现在的样子:

#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);
    }
Run Code Online (Sandbox Code Playgroud)

这里的问题是程序完成后,由于某种原因,z =数组中的最后一个索引.z = count在if语句中,应该可以帮助这种事情不会发生,但它仍然存在.这是为什么?

Mar*_*n R 6

你忘了将if-block括在括号中:

if(numbers[count]<smallest) {
        smallest = numbers[count];
        z = count;
}
Run Code Online (Sandbox Code Playgroud)

因此,你的情况,z = count始终执行.

此外,如果第一个元素恰好是最小元素,z未初始化numbers[0],因此您应该初始化它

 smallest = numbers[0];
 z = 0;
Run Code Online (Sandbox Code Playgroud)

  • @Veske:你还需要初始化z. (2认同)