假设第一个元素最小,为什么这个代码在数组中找到最小数字?

时间:2015-10-31 15:58:10

标签: c cs50

#include<cs50.h>
#include<stdio.h>

int main (void)
{
     int a,array[100],min,c,b=0;

     printf("Enter a number that you wish: \n");

     a=GetInt();

     printf("Now Enter %i Independently \n",a);
     for(int b=0; b<a; b++)
     array[b]=GetInt();
     min = array[0];
     for ( c = 0 ; c < b ; c++ )    
     {
         if ( array[c] < min ) 
            min = array[c];
     }   

     printf("Minimum value is  %i.\n", min);
     return 0;
}

输出

Enter a number that you wish:
4
Now Enter 4 Independently 
2
3
1
4
Minimum value is  2.

但我确信最小数字是1 - 错误是什么?

3 个答案:

答案 0 :(得分:2)

代码中的问题b是此for循环的局部变量

for(int b=0; b<a; b++)
//this b will get destroyed when this for loop terminates

以后你在另一种情况下在你的终止条件下使用它

for ( c = 0 ; c < b ; c++ )
//the b here is the other b which you defined in the 1st line of the program
//             int a,array[100],min,c,b=0;
//the b is this for loop is this one ^^
//this b still has value 0

解决方案是在a循环条件

中使用for
for ( c = 0 ; c < a ; c++ )

答案 1 :(得分:0)

  for(int b=0; b<a; b++)

您再次在循环中声明b,它会覆盖之前声明的b,因此b循环之外for的值不会更改并保持0而你的循环不会迭代。

请勿再次在b循环内声明for。写下这个 -

  for(b=0; b<a; b++)

答案 2 :(得分:0)

b中使用的值for ( c = 0 ; c < b ; c++ )0因为 它被初始化为零,for(int b=0; b<a; b++)不会影响其值。

尝试将for循环更改为for ( c = 0 ; c < a ; c++ )(使用a代替b)。