有没有办法简化这个 IF 语句

时间:2021-07-18 06:52:58

标签: c

有什么方法可以简化这个 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>

3 个答案:

答案 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 的更多详细信息