C语言 scanf返回值以及while问题,大神求解,么么哒~输入字母不能停止循环。

第一次如果输入字母能够停止程序,但是如果第一次输入数字,第二次输入字母的话不能正常停止程序。求解

#include<stdio.h>#define k2 273.16
int main(void){ const double k1=5.0/9.0; printf("请输入华氏温度值:"); double a,b,c; int d= scanf("%lf",&a);while(d>0){ b=k1*(a-32.0); c=b+k2; printf("华氏温度为%lf°,摄氏温度为%lf°,开氏温度为%lf°\n",a,b,c); printf("请继续输入温度值:"); int d=scanf("%lf",&a);}
getchar(); getchar(); return 0;
}

原因:
关键问题在int d=scanf("%lf",&a);语句上。
每次执行语句:int d=scanf("%lf",&a);时都会创建变量d,并且将scanf的返回值赋值给新建的变量d。
第7行创建的d变量才while(d>0)语句执行时真正判断的d变量。
第13行创建的d变量不是while(d>0)语句判断的d。

验证方法:
可以在13行前后各插入一个printf("d=%d\n",d)语句。
13行前的printf打印出来的d应该是第7行d的值;
13行后的printf打印出来的d应该是第13行d的值。

建议:
你把变量的定义放在全部函数一开始,不要用一个变量定义一个变量。
当一个函数里面重复定义同名的变量时,实际使用的是哪个变量很容易混淆。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-11
要求输入的是一个float类型, 干嘛输入字符? 要么你就检测一下输入的值, 不符合就重新输入追问

输入字母之后,scanf读取不合法,返回值不是变成0了吗?为什么while不能停止?

追答

while 中不要重新定义int d
像你这样写, while中的d变量和while(d>0)的d变量并不是同一个
int d=scanf("%lf",&a); 改为 d=scanf("%lf",&a);

本回答被网友采纳