将int值读入数组不能按预期工作

时间:2014-05-14 12:34:06

标签: c

我编写了以下代码来读取数组中的一些int值并找到它们中的最大值。

#include<stdio.h>

int main()   {

    int a[5] ;
    int i ;
    int Gr = 0 ;
    int j ;


    for ( i = 0 ; i <= 5 ; i++ )  {
        scanf( "%d" , &a[i] ) ;
    }


    for ( j = 0 ; j <= 5 ; j++ ) {

        if ( a[j] > Gr)  {
            Gr = a[j] ;
        }   

    }

    printf("%d\n" , Gr ) ;

    return 0 ;
}

我观察到,如果对于数字1 and 2,无论我输入多少次都不会停止循环并打印出最高的数字。

为什么会这样?

2 个答案:

答案 0 :(得分:4)

此:

for ( i = 0 ; i <= 5 ; i++ )  

错误,它将读取6个数字并溢出a,触发未定义的行为(甚至可能覆盖i)。它应该是:

for ( i = 0 ; i < 5 ; i++ )  

在对数组中的for(i = 0; i < N; ++i)项进行简单迭代时,您几乎总是应该使用模式N

对于这个特定的代码,重复5并不是一个好主意,这是一个神奇的常数。使用sizeof在编译时计算它:

for( i = 0; i < sizeof a / sizeof *a; ++i)

答案 1 :(得分:0)

for ( i = 0 ; i <= 5 ; i++ )  

应该是

for ( i = 0 ; i < 5 ; i++ )