You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:10:10