我用多种方式改变了条件,但编译器总是第二个条件为真。
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/