【问题标题】:Why does the bubble sort program show the garbage value when using "break" in for loop?为什么冒泡排序程序在for循环中使用break时会显示垃圾值?
【发布时间】:2021-02-06 09:25:45
【问题描述】:

此代码将从用户那里获取数组的元素,然后对其进行排序。用户输入限制为 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。这意味着其他元素未初始化。这些是垃圾值。您可以通过保存输入元素的数量来修复它。
  • 如何保存输入元素的数量?我的意思是我已经使用“大小”来确定用户输入后的大小。
  • 循环一直持续到i == 20。这意味着(除非用户在此之前输入零值)将在数组末尾读取一个值。结果是未定义的行为。
  • 数组的大小是固定的。它没有改变。 sizeof(a) / sizeof(int); 将始终返回 20
  • “拜托,...不要有毒和傲慢”——拜托,不要写这个,它不属于这个问题,它有点像对绝大多数读者不礼貌。

标签: c++ arrays for-loop break


【解决方案1】:

数组的大小为 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次迭代。我在答案中修复了它。

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2015-09-12
    • 1970-01-01
    • 2022-01-05
    • 2012-08-28
    相关资源
    最近更新 更多