C:无法对包含用户输入元素的整数数组进行排序

时间:2013-03-02 04:57:07

标签: c arrays sorting integer

我正在做以下的家庭作业问题:

构建一个程序,该程序使用一维数组来存储用户输入的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]);
    }
}

2 个答案:

答案 0 :(得分:3)

int numArray[] = {0};

数组的动态大小不是C.由于右侧基本上是int[1],因此您的数组只有1的长度(长度从右侧推断)。您需要指定大小:

int numArray[10] = {0};

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

答案 1 :(得分: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;
}