我正在尝试编写一个可以接受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的范围之间。我希望输出是“数字很好”。请帮忙。
答案 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=>1
和x<=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;
}