Проблема с проверкой чисел от 1 до 100

#c

#c

Вопрос:

Я пытаюсь написать программу на C, которая может принимать 10 чисел от 1 до 100. Если введены значения, выходящие за пределы диапазона, должно отображаться сообщение об ошибке.

Мне удалось написать следующий код для проверки того, находятся ли числа от 1 до 100

 #include <stdio.h>
int main() {
  int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10;
  printf("nEnter the first number : ");
  scanf("%d", amp; num1);
  printf("nEnter the second number : ");
  scanf("%d", amp; num2);
  printf("nEnter the third number : ");
  scanf("%d", amp; num3);
  printf("nEnter the fourth number : ");
  scanf("%d", amp; num4);
  printf("nEnter the fifth number : ");
  scanf("%d", amp; num5);
  printf("nEnter the sixth number : ");
  scanf("%d", amp; num6);
  printf("nEnter the seventh number : ");
  scanf("%d", amp; num7);
  printf("nEnter the eighth number : ");
  scanf("%d", amp; num8);
  printf("nEnter the nineth number : ");
  scanf("%d", amp; num9);
  printf("nEnter the tenth number : ");
  scanf("%d", amp; num10);
  if ((num1 <= 1 amp;amp; num2 <= 1 amp;amp; num3 <= 1 amp;amp; num4 <= 1 amp;amp; num5 <= 1 amp;amp; num6 <= 1 amp;amp; num7 <= 1 amp;amp; num8 <= 1 amp;amp; num9 <= 1 amp;amp; num10 <= 1) amp;amp; (num1 >= 100 amp;amp; num2 >= 100 amp;amp; num3 >= 100 amp;amp; num4 >= 100 amp;amp; num5 >= 100 amp;amp; num6 >= 100 amp;amp; num7 >= 100 amp;amp; num8 >= 100 amp;amp; num9 >= 100 amp;amp; num10 >= 100)) {
    printf("good");
    printf("Numbers are good");
  } else {
    printf("All numbers must be between 1 to 100");
  }
  return (0);
}
  

Когда я запускаю код, я получаю этот вывод «Все числа должны быть от 1 до 100», даже если числа, которые я ввожу, находятся в диапазоне от 1-100. я ожидаю, что результат будет «Числа хороши». Пожалуйста, помогите.

Комментарии:

1. Здесь было бы удобно изучить массивы и циклы.

2. Если я правильно их прочитал, вы требуете, чтобы все числа были меньше или равны единице или больше или равны 100, что невозможно.

3. Я хочу, чтобы введенные числа были от 1 до 100

4. Затем вернитесь и проверьте операторы, которые вы использовали.

5. @CollinsNjoka ты (n >= 1) amp;amp; (n <= 100) не (n <= 1) amp;amp; (n >= 100) хочешь и из жалости используешь цикл для управления всеми числами в нем, а не для дублирования кода

Ответ №1:

Ваш тест неверен, вы хотите (n >= 1) amp;amp; (n <= 100) не (n <= 1) amp;amp; (n >= 100)

Также используйте цикл для управления всеми входными данными, а не дублирующий код, представьте, что вам нужно ввести 1000 чисел.

Предложение:

 #include <stdio.h>
#define N 10
int main() {
  int isAllOk = 1;
  int nums[N]; /* to save the values to have them available later even not used in your question */
  for (int i = 0; i != N;   i) {
    printf("nEnter number %d : ", i   1);
    if (scanf("%d", amp; nums[i]) != 1) {
      fprintf(stderr, "invalid inputn");
      return -1;
    }
    isAllOk amp;= ((nums[i] >= 1) amp;amp; (nums[i] <= 100));
  }
  puts((isAllOk) ? "Numbers are good" : "All numbers must be between 1 to 100");
  return (0);
}
  

Компиляция и выполнение:

 pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra l.c
pi@raspberrypi:/tmp $ ./a.out
Enter number 1 : 1
Enter number 2 : 2
Enter number 3 : 44
Enter number 4 : 3
Enter number 5 : 3
Enter number 6 : 3
Enter number 7 : 3
Enter number 8 : 3
Enter number 9 : 3
Enter number 10 : 3
Numbers are good
pi@raspberrypi:/tmp $ ./a.out
Enter number 1 : 111111111
Enter number 2 : 23
Enter number 3 : 3
Enter number 4 : 3
Enter number 5 : 3
Enter number 6 : 3
Enter number 7 : 3
Enter number 8 : 3
Enter number 9 : 3
Enter number 10 : 3
All numbers must be between 1 to 100
  

Обратите внимание, что также можно немедленно остановить, когда число не находится между 1 и 100, но это кажется несовместимым с вашим запросом.

Ответ №2:

Условие в операторе if неверно. Это должно быть x=>1 и x<=100 . А также не обязательно разделять все scanf и condition.

Ответ №3:

Вашим условием является 1<=num<=100 , а не 1>=num и 100>=num , поэтому решением было бы изменить if условие следующим образом:

 if (
  (num1 >= 1 amp;amp; num2 >= 1 amp;amp; num3 >= 1 amp;amp; num4 >= 1 amp;amp; num5 >= 1 amp;amp; num6 >= 1 amp;amp; num7 >= 1 amp;amp; num8 >= 1 amp;amp; num9 >= 1 amp;amp; num10 >= 1) amp;amp;
  (num1 <= 100 amp;amp; num2 <= 100 amp;amp; num3 <= 100 amp;amp; num4 <= 100 amp;amp; num5 <= 100 amp;amp; num6 <= 100 amp;amp; num7 <= 100 amp;amp; num8 <= 100 amp;amp; num9 <= 100 amp;amp; num10 <= 100)
) {
  printf("Numbers are good");
} else {
  printf("All numbers must be between 1 to 100");
}
  

Ответ №4:

(n <= 1) amp;amp; (n >= 100) неверно. Это должно было быть (n >= 1) amp;amp; (n <= 100) . Теперь вы можете улучшить свой дизайн с помощью циклов, массивов и специальных функций. Это делает ваш код более легким для чтения / понимания, а также легко модифицируемым. Добавление еще 10 значений к группе не должно означать еще 10 (рукописных) проверок, а изменение диапазона не должно означать изменения всех 20 проверок заново. Вот пример реализации:

 #include <stdio.h>
#include <stdbool.h>

bool numb_in_range(int numb, int lower, int upper)
{
  return (numb >= lower) amp;amp; (numb <= upper);
}

bool arry_in_range(int* arry, size_t sz, int lower, int upper)
{
  for (size_t i = 0; i != sz;   i)
  {
    if (!numb_in_range(arry[i], lower, upper))
    {
      return false;
    }
  }
  return true;
}

int main(void)
{
  const size_t sz = 10;
  int arry[sz];
  for (size_t i = 0; i != sz;   i)
  {
    scanf("%d", arry   i);
  }

  if (arry_in_range(arry, 10, 1, 100))
  {
    puts("good");
  }
  else
  {
    puts("bad");
  }

  return 0;
}
  

Ответ №5:

Вам нужно отменить все сравнения, подобные этому:

 if ((num1 >= 1 amp;amp; num2 >= 1 amp;amp; ... amp;amp; num10 >= 1) amp;amp;
    (num1 <= 100 amp;amp; num2 <= 100 amp;amp; ...  amp;amp; num10 <= 100))
  

Ответ №6:

Если N — число, большее или равное 1 и меньшее или равное 100, мы обозначаем его через:

 if(N >= 1 amp;amp; N <= 100)
  

Ответ №7:

Проблема в компараторах, потому что условие неверно.

Вы принимаете как хорошие, когда числа меньше 1 и выше 100 .

 if (
  (num1 >= 1 amp;amp;  num2 >= 1 amp;amp;  num3 >= 1 amp;amp;  num4 >= 1 amp;amp;  num5 >= 1 amp;amp;  num6 >= 1 amp;amp;  num7 >= 1 amp;amp;  num8 >= 1 amp;amp;  num9 >= 1 amp;amp;  num10 >= 1) amp;amp;
  (num1 <= 100 amp;amp;  num2 <= 100 amp;amp;  num3 <= 100 amp;amp;  num4 <= 100 amp;amp;  num5 <= 100 amp;amp;  num6 <= 100 amp;amp;  num7 <= 100 amp;amp;  num8 <= 100 amp;amp;  num9 <= 100 amp;amp;  num10 <= 100)
) {
  printf("good");
}