我正在做选择排序。我写的程序产生了错误的结果,但是当我从网站上复制它时。代码完全相同,只是从网站复制的代码有更多的空格。我提供这两个代码。请帮忙 我写的代码:
#include<stdio.h>
main()
{
int position, array[100], n, c, d, swap;
printf ("Enter the number of elements:\n");
scanf ("%d", &n);
printf ("Enter the %d integer\n",n);
for (c=0 ; c < n ; c++)
scanf ("%d", &array[c]);
for (c = 0 ; c < (n-1); c++)
{
position=c;
for (d = c+1; d < n; d++)
{
if (array[position] > array[d]);
position = d;
}
if (position !=c);
{
swap = array[c];
array[c] = array[position];
array[position] = swap;
}
}
printf ("Sorted list in the ascending order:\n");
for (c=0 ; c < n ; c++)
printf ("%d\n", array[c]);
getch();
}
网站上提供的代码
#include<stdio.h>
main()
{
int array[100], n, c, d, position, swap;
printf("Enter number of elements\n");
scanf("%d", &n);
printf("Enter %d integers\n", n);
for ( c = 0 ; c < n ; c++ )
scanf("%d", &array[c]);
for ( c = 0 ; c < ( n - 1 ) ; c++ )
{
position = c;
for ( d = c + 1 ; d < n ; d++ )
{
if ( array[position] > array[d] )
position = d;
}
if ( position != c )
{
swap = array[c];
array[c] = array[position];
array[position] = swap;
}
}
printf("Sorted list in ascending order:\n");
for ( c = 0 ; c < n ; c++ )
printf("%d\n", array[c]);
getch();
}
答案 0 :(得分:10)
它们不一样 - 只有一个:
if (array[position] > array[d]);
position = d;
而在另一个你有:
if ( array[position] > array[d] )
position = d;
注意第一个中的分散分号,它完全改变了程序的语义。
请注意,编译时始终应启用警告(例如gcc -Wall
) - 这有助于捕捉愚蠢但难以处理的错误,例如上面的示例。
编辑如@Lucas所述,您似乎在该计划的其他地方犯了同样的错误,例如if (position !=c);
- 请注意,C中的分号不仅仅用于美容效果 - 分散的分号(或缺少分号)可以极大地改变程序的行为。