有没有办法在打印结果时丢弃使用 malloc/realloc 存储的数字?

Is there a way to discard a number stored using malloc/realloc when printing the result?

代码的作用:

  1. 要求此人输入 x 个数字,然后输入“0”(零)结束。
  2. 然后使用 malloc/realloc 保存和存储号码。
  3. 借助冒泡排序,输入的数字将按升序排序并打印出来。

我的问题:打印出排序后的数字时,还会添加0(零),这只是为了完成任务而不是添加到列表中该人输入的数字。例如,如果我添加:4,5,8,1,3,1,10(“0”结束)。打印结果将是:0, 1, 1, 3, 4, 5, 8, 10.

我是 C 的新手(只使用了大约 2 周)。到目前为止,我已尝试在此 for 循环中将“ i ”更改为 1。但是,它所做的只是基本上将所有内容移动一步(?)。使 0 只从第一个到最后一个:1, 1, 3, 4, 5, 8, 10, 0.

> //Bubble sort:
>         for (int i = 0; i < inputNumber; i++)

我假设 free() 仅在您要释放所有存储的内存而不是一个特定数字时才有效?任何帮助表示赞赏。此外,是的,这是一项工作任务:)。

代码如下:

int main()
{
    int nr = 1;
    int temp;
    int *numberStore = malloc(sizeof(int));
    int inputNumber = 0;

    while (nr != 0)
    {
        printf("Add numbers to be stored (finish by entering 0): ");
        scanf("%d", &nr);
        printf("\n");
        numberStore[inputNumber] = nr;
        inputNumber++;
        numberStore = realloc(numberStore, (inputNumber + 1) * sizeof(int));
    }

    //Bubble sort:
    for (int i = 0; i < inputNumber; i++)
    {
        for (int j = 0; j < (inputNumber - i - 1); j++)
        {
            if (numberStore[j] > numberStore[j + 1])
            {
                temp = numberStore[j];
                numberStore[j] = numberStore[j + 1];
                numberStore[j + 1] = temp;
            }
        }
    }

    //Prints the stored numbers in ascending order:
    for (int i = 0; i < inputNumber; i++)
    {
        printf("%d\n", numberStore[i]);
    }

    return 0;
}

只是不要将 0 添加到您的数据中

while (nr != 0)
{
    printf("Add numbers to be stored (finish by entering 0): ");
    scanf("%d", &nr);
    printf("\n");
    if (nr != 0)                // only add if not 0
    {
        numberStore[inputNumber] = nr;
        inputNumber++;
        numberStore = realloc(numberStore, (inputNumber + 1) * sizeof(int));
    }
}

或者,同样的想法,稍微紧凑一点:if (nr == 0) break;

只需在排序前减少数字的计数:

    numberStore = realloc(numberStore, (inputNumber + 1) * sizeof(int));
}

// yay - the algorithm thinks there are less numbers in the array
// the last element is just zero - don't care
inputNumber -= 1;

//Bubble sort:
for (int i = 0; i < inputNumber; i++)

这只会为一个元素过度分配数组。更好的选择是根据值决定向数组添加元素 - 如果读取值为 0,则不要添加数组元素。记住要处理错误 - reallocscanf 可能会失败。