有什么方法可以简化这个 if
语句?
if(num1 != 1 && num1 != 2 && num1 != 3 && num1 != 4 && num1 != 5 && num1 != 6 && num1 != 7 && num1 != 8 && num1 != 9 && num1 != 0){
printf("Invalid Number");
return 0;
}
num1
的值将来自用户输入,我只想允许数字作为值,如果用户尝试输入数字以外的任何内容,我希望打印 Invalid Number
。< /p>
答案 0 :(得分:6)
num1
的有效值似乎是介于 0 和 9 之间的任何值。因此...
if ((num1 < 0) || (num1 > 9)) {
printf("Invalid number");
return 0;
}
根据您在下面的评论,我怀疑您真正想要做的是将用户的输入作为文本字符串读取,然后验证他输入的所有字符是否都是数字。 strtol 是一个合适的函数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
long value = 0;
char* endptr = NULL;
bool input_is_valid = false;
char inputline[20 + 1] = { 0 };
printf("Enter a number\n");
scanf("%20s", inputline);
value = strtol(inputline, &endptr, 10);
input_is_valid = (*endptr == '\0') && (value != LONG_MAX) && (value != LONG_MIN);
if (!input_is_valid)
{
printf("Invalid input\n");
return 0;
}
return 0;
}
答案 1 :(得分:0)
@Selbie 的答案可能更适合您的情况,其中数字是序列的一部分,但如果不是这种情况,您可以拥有一个包含可能答案的数组,然后检查您正在寻找的数字 (num1)包含在数组中。
答案 2 :(得分:0)
#include <stdio.h>
#include <ctype.h>
int main()
{
char num1;
printf("Enter num1\n");
scanf(" %c",&num1);
if(isdigit(num1) == 0){
printf("Invalid input");
}
else{
printf("Valid input");
}
return 0;
}
有关 isdigit here 的更多详细信息