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 Negativen");
    }
    else if((a>=0)&&(a<10))
    {
        printf("Your Number has One Digitn");
    }
    else if((a>=10)&&(a<100))
    {
        printf("Your Number has Two Digitsn");
    }
    else if((a>=100)&&(a<1000))
    {
        printf("Your Number has Three Digitsn");
    }
    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.

int i = scanf("%i",&i);// wrong because your input in variable i is modified by return of function scanf.

改用这个

scanf("%i",&i);

查看这篇文章:SCANF 和 printf 的返回值

此外,请使用 %d 而不是 %i。检查文章的链接以了解差异扫描中 %d 和 %i 行为之间的差异

相关内容

  • 没有找到相关文章

最新更新