0

我正在处理以下作业问题:

构建一个程序,使用一维数组来存储用户输入的 10 个数字。输入数字后,用户应该会看到一个菜单,其中包含两个选项,可以按升序或降序对 10 个数字进行排序和打印。

我遇到了一些令人费解的问题。

我的代码发布在下面。我已经设法接受数组元素的用户输入,并且在这里找到了用于对整数数组进行排序的代码:http ://www.java-samples.com/showtutorial.php?tutorialid=1577

该教程中的代码工作得很好,但是只要我为数组中的用户指定元素添加代码而不是自己初始化数组,我就会遇到分段错误:运行程序时出现核心转储错误。它会一直工作,直到它遇到排序程序,然后崩溃。在 gcc 中编译时没有错误。

#include<stdio.h>
#include<stdbool.h>

main()
{
    int temporaryStorage;
    int counter;
    int numArray[] = {0};
    int i = 0;
    bool sortExists = true;

    for (i = 0; i < 10; ++i)
    {
        fprintf(stdout, "Enter element[%d]->", i);
        fscanf(stdin, "%d", &numArray[i]);
    }

    printf("Array Before Sorting\n");
    for(counter = 0; counter < 10; ++counter){
        printf("%d ", numArray[counter]);
    }

    while (sortExists == true)
    {
        sortExists = false;
        for (counter = 0; counter < 9; ++counter)
        {
            if (numArray[counter] > numArray[counter + 1])
            {
                temporaryStorage = numArray[counter];
                numArray[counter] = numArray[counter + 1];
                numArray[counter + 1] = temporaryStorage;
                sortExists = true;
            }
        }
    }

    printf("\n\nArray After Sorting – Ascending Order\n");
    for(counter = 0; counter < 10; ++counter){
        printf("%d ", numArray[counter]);
    }
}
4

2 回答 2

3
int numArray[] = {0};

数组在 C 中不是动态调整大小的。由于右手边基本上是一个int[1]数组,因此您的数组只有一个长度1(长度是从右手边推导出来的)。您需要指定尺寸:

int numArray[10] = {0};

(进一步的段错误提示:段错误几乎总是与分配不足、超出范围的访问或悬空指针有关)

于 2013-03-02T05:02:34.223 回答
0

我已经更正了您的代码并且工作正常。

#include<stdio.h>
#include<stdbool.h>

int main()
 {
  int temporaryStorage;
  int counter;
  int numArray[10];
  int i = 0;
  bool sortExists = true;

for (i = 0; i < 10; ++i)
{
    fprintf(stdout, "Enter element[%d]->", i);
    fscanf(stdin, "%d", &numArray[i]);
}

printf("Array Before Sorting\n");
for(counter = 0; counter < 10; ++counter){
    printf("%d ", numArray[counter]);
}

while (sortExists == true)
{
    sortExists = false;
    for (counter = 0; counter < 9; ++counter)
    {
        if (numArray[counter] > numArray[counter + 1])
        {
            temporaryStorage = numArray[counter];
            numArray[counter] = numArray[counter + 1];
            numArray[counter + 1] = temporaryStorage;
            sortExists = true;
        }
    }
}

printf("\n\nArray After Sorting – Ascending Order\n");
for(counter = 0; counter < 10; ++counter){
    printf("%d ", numArray[counter]);
}
return 0;
}
于 2014-04-03T17:23:37.397 回答