问题检查1到100之间的数字

时间:2019-03-26 11:55:36

标签: c

我正在尝试编写一个可以接受10个1到100之间的数字的C程序。如果输入的数值超出范围,则应显示错误消息。

我设法编写了以下代码来检查,以检查数字是否在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 个答案:

答案 0 :(得分:3)

您的测试是错误的,您希望(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之间,但似乎与您的请求不兼容时,也可以立即停止

答案 1 :(得分:2)

if语句中的条件错误。它必须是x=>1x<=100。而且不必将所有scanf和条件分开。

答案 2 :(得分:1)

您应该更改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");
}

因为您的条件是1 <= num <= 100,而不是1> = num和100> = num

答案 3 :(得分:0)

您需要像这样还原所有比较:

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

答案 4 :(得分:0)

问题出在比较器上,因为条件不正确。当数字小于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");

答案 5 :(得分:0)

如果N是一个大于或等于1且小于或等于100的数字,我们将其表示为:

if(N >= 1 && N <= 100)

答案 6 :(得分:0)

(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;
}