为什么冒泡排序程序在for循环中使用"break"时显示垃圾值?

Why does the bubble sort program show the garbage value when using "break" in for loop?

此代码将从用户那里获取数组的元素,然后对其进行排序。用户输入限制为 20。如果我在此处使用 break,则特定行 if (a[i]==0)break; 有问题,结果显示垃圾值。否则,它工作正常,但我希望用户能够 运行 使用 20 个或更少数字的程序。我的意思是,只要他们觉得已经完成,他们就可以简单地输入 0,这样循环就会中断。我在下面给出代码。请尝试给出简单的解决方案,不要有毒和傲慢。谢谢。

//Sorting with user input array elements
void print(float a[], int n)
{
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
}

void sort(float a[], int n)
{
    for (int i = 1; i < n; i++) {

        for (int j = 0; j < n - i; j++) {
            if (a[j] > a[j + 1]) {
                swap(a[j], a[j + 1]);
            }
        }
    }
}

int main()
{
    float a[20];
    int size;
    court << "Enter Floats and terminate with 0 (Highest limit is 20)" << endl;
    for (int i = 0; i <= 20; i++) {
        cout << "a[" << i << "] : ";
        cin >> a[i];
        if (a[i] == 0)
            break;
    }
    size = sizeof(a) / sizeof(int);

    cout << "\nGiven Values   :: ";
    print(a, size);
    cout << endl;
    sort(a, size);
    cout << "Sorted Result    :: ";
    print(a, size);
}

数组的大小为 20。用户设置值直到输入 0。这意味着其他元素未初始化。这些是垃圾值。您可以通过保存输入的元素数量来修复它。

//Sorting with user input array elements
void print(float a[], int n)
{
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
}

void sort(float a[], int n)
{
    for (int i = 1; i < n; i++) {

        for (int j = 0; j < n - i; j++) {
            if (a[j] > a[j + 1]) {
                swap(a[j], a[j + 1]);
            }
        }
    }
}

int main()
{
    float a[20];
    int size{0};
    court << "Enter Floats and terminate with 0 (Highest limit is 20)" << endl;
    for (int i = 0; i < 20; i++) {
        cout << "a[" << i << "] : ";
        cin >> a[i];
        if (a[i] == 0)
            break;
        ++size;
    }

    cout << "\nGiven Values   :: ";
    print(a, size);
    cout << endl;
    sort(a, size);
    cout << "Sorted Result    :: ";
    print(a, size);
}

for循环也有问题。该数组的大小为 20,但 for 循环从 0 开始并迭代直到包含 20。那是 21 次迭代。我在回答中修正了它。