有没有办法在打印结果时丢弃使用 malloc/realloc 存储的数字?
Is there a way to discard a number stored using malloc/realloc when printing the result?
代码的作用:
- 要求此人输入 x 个数字,然后输入“0”(零)结束。
- 然后使用 malloc/realloc 保存和存储号码。
- 借助冒泡排序,输入的数字将按升序排序并打印出来。
我的问题:打印出排序后的数字时,还会添加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,则不要添加数组元素。记住要处理错误 - realloc
和 scanf
可能会失败。
代码的作用:
- 要求此人输入 x 个数字,然后输入“0”(零)结束。
- 然后使用 malloc/realloc 保存和存储号码。
- 借助冒泡排序,输入的数字将按升序排序并打印出来。
我的问题:打印出排序后的数字时,还会添加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,则不要添加数组元素。记住要处理错误 - realloc
和 scanf
可能会失败。