C - if-else 语句的不合理结果

标签 c if-statement logical-operators

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

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,条件始终为真。
这段代码有什么问题?我期望工作正常,但事实并非如此。

最佳答案

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

scanf 返回成功读取的参数数量,假设成功读取,则为 1。而且只有一位数字! (是的,检查 scanf 的返回值总是一个好主意。)

一个好的逐行调试器不会像你的问题所暗示的那样让你失去嗅觉 - 问题不在于 signf 中。

关于C - if-else 语句的不合理结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055438/

相关文章:

c - 在同一个 if 测试中测试多个条件?

java - 在检查用户输入的字母时避免 26 if/elseif/else 语句

html - 如何使用 if 语句在 SCSS 中查找类名?

python - 如何在 Python 中将字符串转换为逻辑表达式

c - 如何在没有 clang_complete 的情况下在 vim 中获得 C 代码完成?

c - OpenCV:如何强制图像窗口出现在其他窗口之上?

c - 将二维数组写入文件图像的最快方法?

C if语句字符串条件

c - C中的逻辑表达式误解

java - if 语句中的问题