首页 > 解决方案 > C - if-else 语句的不合理结果

问题描述

我以多种方式更改了条件,但编译器总是第二个条件为真。

int signf(int a);

int main(void)
{
    printf("Enter A Number :\n");
    int i = scanf("%d", &i);    
    signf(i);
    return 0;
}

int signf(int a)
{
    if(a<0)
    {
        printf("Your Number is Negative\n");
    }
    else if((a>=0)&&(a<10))
    {
        printf("Your Number has One Digit\n");
    }
    else if((a>=10)&&(a<100))
    {
        printf("Your Number has Two Digits\n");
    }
    else if((a>=100)&&(a<1000))
    {
        printf("Your Number has Three Digits\n");
    }
    else
    {
        printf("Your Number is Huge!\n");
    }
    printf("This is End!\n");
    return 0;
}

它总是显示:你的号码有一位,无论我输入 8 还是 56 或 849,条件总是正确的。
这个代码有什么问题?我希望工作正常,但没有。

标签: cif-statementlogical-operators

解决方案


int i = scanf("%i", &i);是滥用scanf- 你的编译器没有警告你吗?

scanf返回已成功读取的参数数,在您的情况下为 1,假设读取成功。那是一位数字!(是的,检查 的返回值总是一个好主意scanf。)

正如您的问题所暗示的那样,一个好的逐行调试器不会让您失去嗅觉 - 问题不在signf.


推荐阅读