相同的程序相同的编译器,但我在c中有不同的输出

时间:2016-02-24 15:54:01

标签: c

\\First program
#include<stdio.h>
int main()
{
 int array[30],n,c,d,position,swap;
 clrscr();
 printf("Enter the legth of array\n");
 scanf("%d",&n);
 printf("Enter element in array\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\n");
for(c=0;c<n;c++);
{printf("%d\n",array[c]);}
getch();
}


\\Second program
#include<stdio.h>
#include<conio.h>
int main()
{
 int array[30],n,c,d,position,swap;
 clrscr();
 printf("Enter the legth of array\n");
 scanf("%d",&n);
 printf("Enter element in array\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\n");
 for(c=0;c<n;c++);
 {printf("%d\n",array[c]);}
 getch();
 return 0; 
}

这两个程序是用于选择排序的程序。我认为第一个程序和第二个程序几乎相同,但输出不一样。我用turbo c来运行这两个程序

在第一个程序中,我从互联网上复制,结果为真(输入为2 1 /输出为1 2)。对于第二个程序,我尝试自己做(intput是2 1 /输出是3),结果是假的。

每个人都帮助我。我很困惑。谢谢:]

1 个答案:

答案 0 :(得分:1)

这两个程序都是错误的,你得到了未定义的行为:

for(c=0;c<n;c++);  // << the ; should not be here
                   // now c contains 2
                   // and you print array[2] once
                   // and as array[2] hasn't bee initialized
                   // printf will print a more or less random value

{printf("%d\n",array[c]);}
getch();

更正(并且格式正确)版本

for (c = 0; c < n;c++)
{
  printf("%d\n",array[c]);}
}
getch();

如果您从一开始就正确地格式化了代码,那么您可能会自己发现问题。