【发布时间】:2019-06-25 16:54:16
【问题描述】:
我是 C 新手,我正在练习 for 循环和指针。 在本练习中,我尝试编写一个对数组元素进行排序的函数。代码的第一部分(我输入元素的地方)正在工作,但下面的一切都让我很难过。我不明白问题出在 if/else 语句中还是循环结构中的其他任何地方。最后一个循环也不起作用(我只是希望它遍历排序的数组并打印元素,就像我之前对它未排序所做的那样。
希望我能得到一些帮助,如果你看到更多我应该注意的...
非常感谢。
我尝试检查我定义循环的方式是否准确,我输入了所有正确的值,以及我对数组排序的基本“想法”是否正常。
void sort_array_elements()
{
int x, i, j, k, temp;
printf("\n input the number of elements to store in the array: ");
scanf_s("%d", &x);
int arrnum[30];
ptr_int = &x;
printf("input %d elements in the array: \n", x);
for (i = 0; i < x; i++)
{
scanf_s("%d\n", &arrnum[i]);
}
printf("the elements in the array before sorting: \n");
for (i = 0; i < x; i++)
{
printf("element %d: %d\n", i, arrnum[i]);
}
for (i = 0; i < x; i++)
{
for (j = 1; j < x; j++)
{
if (arrnum[i] > arrnum[j])
{
temp = arrnum[i];
arrnum[i] = arrnum[j];
arrnum[j] = temp;
}
else if (arrnum[i] == arrnum[j])
{
for (k = arrnum[i + 1]; k < x; k++)
{
if (arrnum[k] != arrnum[j])
{
temp = arrnum[k];
arrnum[k] = arrnum[j];
arrnum[j] = temp;
break;
}
}
}
}
}
printf("the elements in the array after sorting: \n");
for (i = 0; i < x; i++)
{
printf("element %d: %d\n", i, arrnum[i]);
}
}
【问题讨论】:
-
我建议您完全删除所有
else代码块。无论如何,您正在按k进行索引,其值取决于输入数据。假设一个数组元素的值为10000000?那么arrnum[k]会访问什么? -
你应该说
if(x > 30) x = 30; -
scanf 中的 \n 是做什么的?它让你输入 n+1 个数字但你没有注意到?
-
@iooshine 变量ptr_int在哪里声明,它的含义是什么?
-
@iooshine 您应该将该功能拆分为其他几个功能。例如,一个函数输入一个数组。其他函数对数组进行排序。另一个函数输出一个数组。
标签: c for-loop if-statement