else if语句阻止程序检测到最大索引

时间:2017-09-07 17:05:23

标签: c

此程序的目的是检测命名数组中的最大数量。目前,它只检测数组的最后一位数。如果else if被删除或注释掉,那么它可以正常检测除最后一位数之外的所有数字。

#include <stdio.h>

int main(){
    int c,i,max;

    printf("Enter the size of the array.");
    scanf("%d",&c);

    int array[c];

    printf("Enter the integers to fill the array.\n");
    for(i=0;i<c;i++){
        scanf("%d",&array[i]);
    }//end for

    int last_element = array[c-1];

    for(i=0;i<c;i++){
        printf("%d",array[i]);
        if(array[i-1] > array[i])  //This if statement detects greatest     
        {                          //index of array for all but last index 
            max = array[i-1];
        }//end if
        else if(last_element > array[i-1])  //This else if detects greatest
        {                                   //index of array in last index
            max = last_element;             //This statement is always eval
        }//end if                           //uating true.
    }//end for

    printf("\n%d",max);
    return 0;
}//end main

2 个答案:

答案 0 :(得分:1)

$sqlquery="SELECT * FROM tableusers WHERE status = 'off' IN (SELECT DATE(mydate) AS mydate FROM tableusers where mydate < CURDATE()) ";

试试这个

答案 1 :(得分:0)

  

逐点纠正错误:

     
      
  1. for(i=1;i<c;i++) i需要设置为1.因此,当您执行数组[i-1]时,它从i = 1开始,以便array[1-1]发生。   否则,如果i设置为0,则结果为array[0-1]   ,即数组[-1],因为没有定义这个值,它可以指向   堆栈内存中的任何值。

  2.   
  3. if(array[i-1] > array[i])这个if语句只是检查,如果前一个值大于它的下一个值,即,如果有一个数组1 2 3 4 5 6 7,它只会看到。那么if (array[0]>array[1] )   if(array[1] > array[2] )。在示例数组1 2 3 4 5 6 7中,   这是升序,它永远不会进入if条件。   因为,1 > 2不是真的。 2 > 3不是真的,依此类推。因此   正确的检查方法是检查当前的数组索引   使用现有的最大值。即,

  4.         

    if(array[i-1] > max) { max = array[i-1] ;}这将继续取代   如果遇到更大的数字,则为max值。然后检查一下   下一个最大数字

         
        
    1. else if(last_element > array[i-1])  //This else if detects greatest
      {                                   //index of array in last index
          max = last_element;             //This statement is always eval
      }//end if                           //uating true.
      }//end for
      
    2.         

      现在这又是一个错误的陈述。考虑示例数组   5 4 3 2 1' .Here the last element is always smaller than array [i-1]`,表示最后一个元素总是小于全部   以前的元素。所以这种情况永远不会进入。

           

      最后,正确的代码:声明一个变量int max = 0这样,如果   array [i]&gt; max,然后将max值替换为该数组的值。和   然后使用新声明的最大值

      检查下一个数组值
      int max =0;
      for(int i=0; i<c; i++){
      if(array[i] > max){
      max=array[i];
      }
      }