2014-04-14 5 views
0

Я пытаюсь написать фрагмент кода, который будет принимать 6 входов и возвращать наименьшее и наибольшее число, когда это будет сделано. Проблема, с которой я сталкиваюсь, заключается в том, что во время 6-го цикла независимо от того, какой номер я вводил, он перезаписывает мое _max-переменное, игнорирующее условие в инструкции IF.Оператор IF игнорируется в последнем цикле

#include <stdio.h> 
int main() 
{ 
    int  i; 
    int  _min; 
    int  _max; 
    int  input[6]; 
      _min=20; 
      _max=0; 

    for(i=1;i<=6;i++) 
    { 
     scanf("%d",&input[i]); 
     if(input[i]<_min) 
      {_min=input[i];} 
     if(input[i]>_max) 
      {_max=input[i];} 
     printf("min:%d max:%d\n",_min,_max); 
    } 
    return 0; 
} 
+3

Массив размера 6 идет от 0 до 5, а не от 1 до 6. Таким образом, при последней инициализации он выходит за пределы массива, что является проблемой. – AntonH

+0

также main должен быть функцией с (void) аргументом, not(), который рассматривается как неизвестное число целых аргументов ... – zubergu

+0

О, я вижу, у меня было неправильное предположение, что его фактически от 0 до 6. – user3533671

ответ

2

это то, что вы хотите ... переверните все их.

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

Спасибо, что сработало – user3533671

0

Это происходит потому, что элементы массива пронумерованы от 0 до 5, а не от 1 до 6.

Так, так как вы определили переменные в следующем порядке:

int  _min; 
int  _max;  <---- 
int  input[6]; 

.. . Когда вы пишете до input[6], вы фактически записываете в память сразу после input[5], который занят _max. Я думаю, если бы вы написали input[7], вы увидите то же самое, что и ваше _min.

(Обратите внимание, однако, что фактическое распределение переменных зависит от компилятора и платформы. Когда данные заканчиваются, когда переполняет буфер, это не так просто сказать).

Смежные вопросы