使用scanf与不使用scanf时double类型变量的计算结果异常问题
问题原因与解决方案
核心问题
你的scanf格式字符串和实际输入的分隔符不匹配,导致变量未被正确赋值:
- 代码中
scanf("%lf, %lf, %lf", &a, &b, &c);要求输入的数字之间必须是逗号+空格的格式(比如1, 2, 1) - 但你实际输入的是
1 2 1(仅用空格分隔),这会让scanf读取失败,a、b、c会保留未初始化的垃圾值,最终计算出错误结果。
两种解决办法
办法1:按格式要求输入
输入时严格遵循格式字符串的规则,用逗号加空格分隔数字:
1, 2, 1
办法2:修改格式字符串适配空格输入
把scanf的格式字符串改成仅用空格分隔(scanf会自动忽略任意空白字符,包括空格、换行、制表符),这样输入1 2 1就能正常读取:
#include <stdio.h> int main(){ double a, b, c , x0, Delta; printf("Enter three numbers:"); scanf("%lf %lf %lf", &a, &b, &c); // 去掉格式字符串里的逗号 Delta = b*b - 4*a*c; printf("The value of Delta is %f \n", Delta); x0 = -b/(2.0*a); printf("\n the value of x0= %f", x0); return 0; }
验证结果
修改后输入1 2 1,会得到正确的计算结果:
The value of Delta is 0.000000 the value of x0= -1.000000
(注:根据公式x0 = -b/(2.0*a),当a=1、b=2时,结果应为-1.000000,你提到的直接赋值得到1.000000应该是笔误)
内容的提问来源于stack exchange,提问作者beautiful-life
相关产品推荐
相关产品推荐

