我刚刚开始学习C,今天我遇到了一个问题,其中一个部分是接受用户的数字数组并按升序排列。数组大小也由用户指定。 我为此目的使用了以下代码 - >
for (i = 0; i <= y - 1; ++i) {
for (ii = i + 1; ii <= y - 1; ++ii) {
if (x[i] > x[ii]) {
temp = x[i];
x[i] = x[ii];
x[ii] = temp;
}
}
}
int k;
printf("\nNumbers arranged in ascending order:\n");
for (k = 0; k < y; ++k) {
printf("%d\n", x[i]);
}
这里,变量y是数组的大小,x是数组变量的名称(所以变量定义就像这样 - &gt; int x[y];
但问题是,它只打印出数组的最终值。详细说明问题:
假设我输入3作为我的数组大小。程序问我3个数字,我选择34,45,22。
现在执行完整个代码之后,它会显示x [3](现在x [3]甚至不存在!因为x [2]是数组中的最终值。所以它给出了变量的内存位置。)
我哪里错了?
答案 0 :(得分:5)
您需要更改
printf("%d\n", x[i]);
到
printf("%d\n", x[k]);
在打印循环中,因为您使用k
作为循环计数器变量。
答案 1 :(得分:0)
在你最后的for循环中,你正在做
printf("\nNumbers arranged in ascending order:\n");
for (k = 0; k < y; ++k) {
printf("%d\n", x[i]);
}
但您打印x[i]
,但不增加i
。请记住,i
和k
只是数组变量,而不是数组中的实际VALUES。只需将printf
更改为printf("%d\n", x[k]);
即可正常使用。