我以几种方式更改了条件,但编译器总是第二个条件为真。
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 行为之间的差异