Проблема проверки номеров от 1 до 100 - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь написать программу на 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", & num1);
  printf("\nEnter the second number : ");
  scanf("%d", & num2);
  printf("\nEnter the third number : ");
  scanf("%d", & num3);
  printf("\nEnter the fourth number : ");
  scanf("%d", & num4);
  printf("\nEnter the fifth number : ");
  scanf("%d", & num5);
  printf("\nEnter the sixth number : ");
  scanf("%d", & num6);
  printf("\nEnter the seventh number : ");
  scanf("%d", & num7);
  printf("\nEnter the eighth number : ");
  scanf("%d", & num8);
  printf("\nEnter the nineth number : ");
  scanf("%d", & num9);
  printf("\nEnter the tenth number : ");
  scanf("%d", & num10);
  if ((num1 <= 1 && num2 <= 1 && num3 <= 1 && num4 <= 1 && num5 <= 1 && num6 <= 1 && num7 <= 1 && num8 <= 1 && num9 <= 1 && num10 <= 1) && (num1 >= 100 && num2 >= 100 && num3 >= 100 && num4 >= 100 && num5 >= 100 && num6 >= 100 && num7 >= 100 && num8 >= 100 && num9 >= 100 && num10 >= 100)) {
    printf("good");
    printf("Numbers are good");
  } else {
    printf("All numbers must be between 1 to 100");
  }
  return (0);
}

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

Ответы [ 7 ]

3 голосов
/ 26 марта 2019

Ваш тест неверен, вы хотите (n >= 1) && (n <= 100) не (n <= 1) && (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", & nums[i]) != 1) {
      fprintf(stderr, "invalid input\n");
      return -1;
    }
    isAllOk &= ((nums[i] >= 1) && (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 голосов
/ 26 марта 2019

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

1 голос
/ 26 марта 2019

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

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

bool numb_in_range(int numb, int lower, int upper)
{
  return (numb >= lower) && (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;
}
1 голос
/ 26 марта 2019

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

if (
  (num1 >= 1 && num2 >= 1 && num3 >= 1 && num4 >= 1 && num5 >= 1 && num6 >= 1 && num7 >= 1 && num8 >= 1 && num9 >= 1 && num10 >= 1) &&
  (num1 <= 100 && num2 <= 100 && num3 <= 100 && num4 <= 100 && num5 <= 100 && num6 <= 100 && num7 <= 100 && num8 <= 100 && num9 <= 100 && num10 <= 100)
) {
  printf("Numbers are good");
} else {
  printf("All numbers must be between 1 to 100");
}
0 голосов
/ 26 марта 2019

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

if(N >= 1 && N <= 100)
0 голосов
/ 26 марта 2019

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

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

if (
  (num1 >= 1 &&  num2 >= 1 &&  num3 >= 1 &&  num4 >= 1 &&  num5 >= 1 &&  num6 >= 1 &&  num7 >= 1 &&  num8 >= 1 &&  num9 >= 1 &&  num10 >= 1) &&
  (num1 <= 100 &&  num2 <= 100 &&  num3 <= 100 &&  num4 <= 100 &&  num5 <= 100 &&  num6 <= 100 &&  num7 <= 100 &&  num8 <= 100 &&  num9 <= 100 &&  num10 <= 100)
) {
  printf("good");
}
0 голосов
/ 26 марта 2019

Вам нужно отменить все сравнения следующим образом:

if ((num1 >= 1 && num2 >= 1 && ... && num10 >= 1) &&
    (num1 <= 100 && num2 <= 100 && ...  && num10 <= 100))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...