Чтение чисел от пользователя до отрицательного числа, возвращая наибольшее, наименьшее, диапазон и число? - PullRequest
0 голосов
/ 20 марта 2020
#include <stdio.h>
#include <math.h>

int main(void) {
  int a,count,highest,lowest,range;
  for(count=0;scanf("%d",&a) >= 0;count++){
    if(count == 0){
      highest = a;
      lowest = a;
    }
    if(a > highest){
      highest = a;

    }
    if(a < lowest){
      lowest = a ;
    }

  }
  range = highest - lowest;
  printf("%d\n %d\n %d\n %d\n",count,highest,lowest,range);
  return 0;
}

проблема в том, что эта программа не останавливается, пока я не нажму CTRL D, однако я хочу, чтобы она остановилась, когда я введу отрицательное число, как вы можете видеть в scanf("%d",&a) >= 0; Как я могу решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 20 марта 2020

Запишите условие в for l oop следующим образом

for ( count = 0; scanf("%d",&a) == 1 && a >= 0; count++ ){
//...

Также лучше объединить все операторы if в группу операторов if-else, таких как

if ( count == 0 ){
  highest = a;
  lowest = a;
}
else if( a > highest ){
  highest = a;
}
else if(a < lowest){
  lowest = a ;
}
2 голосов
/ 20 марта 2020

scanf() функция в C возвращает общее количество успешно отсканированных входов или EOF, если сбой входа произошел до того, как был назначен первый получаемый аргумент. Так что в вашем случае scanf("%d",&a) возвращает значение 1 даже при вводе отрицательного числа. Следовательно, for l oop в вашем коде не завершится, пока вы не нажмете CTRL D .

1 голос
/ 20 марта 2020

это scanf("%d",&a) >= 0 не проверяет a>=0 эта проверка scanf возвращена, что касается успешности получения данных и количества введенных входных данных.

int main(void) {
  int a,count,highest,lowest,range;
 scanf("%d",&a);
 for(count=0;a>= 0;count++){
    if(count == 0){
      highest = a;
      lowest = a;
    }
    if(a > highest){
      highest = a;

    }
    if(a < lowest){
      lowest = a ;
    }
   scanf("%d",&a);
  }
  range = highest - lowest;
  printf("%d\n %d\n %d\n %d\n",count,highest,lowest,range);
  return 0;
}
...