C - 索引问题

时间:2014-02-06 14:44:05

标签: 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);
    }

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

3 个答案:

答案 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;

所以这是一个括号问题