求助:不同编译器结果不同?
想问一问各位前辈,是不是不一样的编译器对代码的编译不一样的?谢谢下面一段代码,我用WINTC编译,输入26,输出结果是:90 1 10 20 90 30 40 50 60 70 80 90
而我用codeblocks(不知道是神马编译器)进行编译时,输入26,输入出输出结果却是:26 1 10 20 26 30 40 50 60 70 80 90
而且听前辈说过,这一段代码的数组应该是越界定义的,为什么又不会显示编译错误呢?
#include "stdio.h"
#define N 10
void main()
{
int a[]={1,10,20,30,40,50,60,70,80,90} ,x,i,p;/*定义数组及其它变量*/
scanf("%d",&x); /*输入X的数值*/
for(i=0,p=N;i<N;i++) /*利用循环判断X在数组中的位置*/
if(x<a[i])
{
p=i;
break;
}
for(i=N-1;i>=p;i--) /*利用循环重新分配在X插入后数值对应的位置*/
a[i+1]=a[i];
a[p]=x; /*确定X在数组中的位置*/
printf("%d",x);
for(i=0;i<=N;i++) /*利用循环输出更新后的数组*/
printf("%5d",a[i]);
printf("\n");
getch(); /*wintc需要这一个*/
}
下面是我的后面改过的一段代码,输入数值,发现编译结果是一样的,这又是为什么呢?
#include "stdio.h"
#include <conio.h>
#define N 10
void main()
{
int a[11]={1,10,20,30,40,50,60,70,80,90} ,x,i,p;/*定义数组及其它变量*/
scanf("%d",&x); /*输入X的数值*/
for(i=0,p=N;i<N;i++) /*利用循环判断X在数组中的位置*/
if(x<a[i])
{
p=i;
i=N;
}
for(i=N-1;i>=p; i--) /*利用循环重新分配在X插入后数值对应的位置*/
a[i+1]=a[i];
a[p]=x; /*确定X在数组中的位置*/
printf("%d",x); /*输出X的数值*/
for(i=0;i<=N;i++) /*利用循环输出更新后的数组*/
printf("%5d",a[i]);
printf("\n");
getch(); /*wintc需要这一个*/
}
谢谢。