排序前显示的随机数

时间:2015-08-21 18:04:20

标签: c++

我正在尝试输入10个数字然后调用函数(排序)以按升序对它们进行排序。排序后,主程序还会调用函数getAvg来平均数组中的数字。但是,在将10个值放入数组后。在我的输出之前显示了一些随机数字。

我做错了什么?

#include<iostream>
#include<stdio.h>

using namespace std;

void sorting(int array[]) {
    int t;
    int x=0;

    for (x=0; x<10; x++)
    {
        for (int y=0; y<9; y++)
        {
            if(array[y]>array[y+1])
            {
                t=array[y];
                array[y]=array[y+1];
                array[y+1]=t;
            }
        }
    }
}

double getAvg(int array[]) {
    double sum=0;
    double avg=0;
    for (int j=0;j<10;j++){
        sum=sum+array[j];
    }
    avg=sum/10;
    return avg;
}


int main()
{
    int input=0;
    int array[10];
    double avg=0;
    printf("%s","Enter the 10 temperatures \n");
    for(int i=0;i<10;i++){
        scanf("%i",&input);
        array[i]=input;
    }

    sorting(array);    
    avg = getAvg(array);

    for (int k=0;k<=10;k++){
        cout<<array[k-1]<<" ";
    }

    printf("%s %.2lf %s","The average is ",avg, ".");
}

3 个答案:

答案 0 :(得分:3)

我认为错误出现在以下代码中:

for (int k=0;k<=10;k++){
    cout<<array[k-1]<<" ";
}

请注意,在循环的第一次迭代中,您将拥有k=0,因此这会尝试打印出数组索引-1。这会导致未定义的行为 - 从技术上讲,任何事情都可能发生 - 在您的情况下,它会在数组开始之前读取垃圾数据。

要解决此问题,请更改循环边界,使它们在数组上正确范围:

for (int k=0; k < 10;k++){
    cout<<array[k]<<" ";
}

我的猜测是你意识到你读得太远并试图通过从数组索引中减去一个来解决这个问题,而数组索引刚刚引入了一个新错误。希望这可以解决这个问题!

答案 1 :(得分:2)

for (int k=0;k<=10;k++){
    cout<<array[k-1]<<" ";
}

您显示的是-1到9,表示11个值。第一个值(数组[-1])未初始化。

您需要将k&lt; = 10更改为k&lt; 10并打印数组[k]而不是数组[k-1]:

for (int k=0;k<10;k++){
    cout<<array[k]<<" ";
}

答案 2 :(得分:1)

问题是您要在阵列的-19位置打印元素。没有职位-1