这是我的代码:
#include<stdio.h>
#include<cs50.h>
int main(void)
{
int array[8] = {2, 5, 3, 1, 4, 6, 9, 7};
for (int j = 0; j < 8; j++)
{
for (int i = 0; i < 8 ; i++)
{
if (array[i] > array[i + 1])
{
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
for (int i = 0; i < 8; i++)
printf("%i", array[i]);
printf("\n");
}
以下是我的终端窗口的屏幕截图:http://i.imgur.com/Q1yCsgR.jpg
正如你所看到的,我没有做任何改动,只是一直运行它直到最终工作。更重要的是,当我尝试在main中添加一个存储 sizeof 数组的变量 n ,并替换了&#39; 8&#39;在带有n的for循环中,到终端窗口的输出只是非常疯狂,并且每次运行时都拒绝倾向于正确的答案。
答案 0 :(得分:4)
if (array[i] > array[i + 1])
在上面的if
语句中,当i
为7时,您正在访问越界,并且会导致undefined behaviour。您可以通过将for
循环条件更改为:
for (int i = 0; i < 7 ; i++)
答案 1 :(得分:1)
在i
为7的内部循环中,您访问未定义的array[i+1]
。
将内循环更改为for (int i = 0; i < 7 ; i++)
,它应该可以正常工作。