c - 编写时给出错误答案但复制时给出正确答案的程序

标签 c

<分区>

我在做选择排序。我编写的程序生成了错误的结果,但是当我从站点复制它时。除了从网站上复制的代码有更多的空格外,代码完全相同。我提供了这两个代码。请帮忙 我写的代码:

#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();
}

最佳答案

它们不一样 - 在一个你有:

if (array[position] > array[d]);
position = d;

而在另一个你有:

     if ( array[position] > array[d] )
        position = d;

请注意第一个中的分号,它完全改变了程序的语义。

请注意,您应该始终在编译时启用警告(例如 gcc -Wall)——这有助于捕捉愚蠢但难以发现的错误,例如上述示例。


编辑 正如@Lucas 所指出的,您似乎在程序的其他地方犯了同样的错误,例如if (position !=c); - 请注意,C 语言中的分号不仅仅是为了装饰效果 - 一个杂散的分号(或丢失的分号)可以显着改变程序的行为。

关于c - 编写时给出错误答案但复制时给出正确答案的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586220/

相关文章:

c - 如何在 Eclipse IDE 中运行简单的 C 程序

c - 尝试循环数组时在 C 中出现异常错误

c - 无法从结构内部的字符数组中检索数据

c - 有没有办法让 gcc 或 clang 对显式强制转换发出警告?

使用制表符的 C 输出格式

C - 数字总和

c - 访问代码中的全局静态表不匹配

c - 段错误(核心转储)错误,在 C 搜索函数中

c - 指针不会显示到队列中的下一个条目

c - 为什么在 C 的堆中 malloc 2GB 或更大的内存会失败?