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



代码的作用:

  1. 要求用户输入x数量的数字,并通过输入";0";(零(
  2. 然后使用malloc/realloc保存和存储这些数字
  3. 在冒泡排序的帮助下,输入的数字将按升序进行排序和打印

我的问题:当打印出排序后的数字时,它还会添加0(零(,唯一的目的是完成任务,而不是添加到人员输入的数字列表中。例如,如果我加上:4,5,8,1,3,10,10("0"结束(。打印结果为:0、1、1、3、4、5、8、10。

我是C的新手(只使用了大约两周(。到目前为止,我已经尝试过改变";i〃;在这个for循环中为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("%dn", 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可能会失败。

相关内容

  • 没有找到相关文章

最新更新