代码的作用:
- 要求用户输入x数量的数字,并通过输入";0";(零(
- 然后使用malloc/realloc保存和存储这些数字
- 在冒泡排序的帮助下,输入的数字将按升序进行排序和打印
我的问题:当打印出排序后的数字时,它还会添加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,则不要添加数组元素。请记住处理错误-realloc
和scanf
可能会失败。