日期:2014-05-16  浏览次数:20600 次

linux里面运行最简单的c程序居然出现这种情况
C/C++ code
#include <stdio.h>
void    main()
{
    int    i,j,temp,array[4][4];
printf("Input 4*4 data:\n"); 
for(i=0;i<4;i++) 
for(j=0;j<4;j++) 
scanf("%d",&array[i][j]);
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            if(i!=j)
            {
                temp=array[i][j]; array[i][j]= array[j][i]; array[j][i]=temp;
            }
for(i=0;i<4;i++) 
{
    printf("\n");
for(j=0;j<4;j++) 
printf("%d\t",array[i][j]);
    }
}


我在Linux里面运行输入一下的数据:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
程序的结果是:
1 2 3 4
5 6 7 8
9 10 11 12

之后我看了半天不知道为什么
我又在Window里面运行了一下发现输入相同的数据,但是结果是
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

弄的我郁闷

我在linux平台又把程序改为
C/C++ code

for(i=0;i<5;i++) 
{
    printf("\n");
         for(j=0;j<4;j++) 
         printf("%d\t",array[i][j]);
}



结果就一样,但是我又在想这段程序的功能应该是把输入的数字行列对换吧,但从输出的结果来看好像不是那样!这是为什么啊???

------解决方案--------------------
scanf("%d",&array[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i!=j)
{
temp=array[i][j]; array[i][j]= array[j][i]; array[j][i]=temp;
}
这个循环有问题,每个数交换了两次。
------解决方案--------------------
汗,我承认:我第一次看的时候以为是数据输出不全,还试了试是否果然如此神奇……

再仔细看,原来是要问数据交换的……

来回交换了两次,a[1][2] 和a[2][1]交换一次,然后i=2,j=1的时候,a[2][1]和a[1][2]交换