【问题标题】:Scanf assigns "junk" values to variavelsScanf 将“垃圾”值分配给变量
【发布时间】:2012-07-23 22:27:13
【问题描述】:

我尝试编写一个简单的 c 程序来处理导数,但这不是问题的重点: 当我运行程序时,它要求我输入一堆浮点值,但不管我输入什么,scanf 函数总是会为变量分配“垃圾”值,代码如下:

double a, b, c, d, x, h;
printf("Please enter the coefficient of X cubed: ");
scanf("%3f", &a);
printf("\nPlease enter the coefficient of X squared: ");
scanf("%3f", &b);
printf("\nPlease enter the coefficient of X: ");
scanf("%3f", &c);
printf("\nPlease enter the free coefficient: ");
scanf("%3f", &d);
printf("\nPlease enter x: ");
scanf("%3f", &x);
printf("\nPlease enter the offset: ");
scanf("%3f", &h);

printf("%.3f %.3f %.3f %.3f %.3f %.3f", a,b,c,d,x,h);

我输入了 a、b、c、d、x 和 h 的值,但 printf 函数显示的值非常奇怪 - 与我输入的完全不同。

我用我想到的所有可能的方式搜索了它,但我似乎无法找到它发生的原因。

有人可以尝试找出它发生的原因吗?

【问题讨论】:

  • 阅读scanf 格式字符串的文档。它们不同于printf。你想要“%lf”。
  • 真的有必要否决我的问题吗?它有什么问题?
  • 我没有投反对票(我也不打算投反对票),但我猜原因是您可以通过查看手册页来回答这个问题。这并没有显示出太多的研究努力。
  • 我的反对票是由于已经引用的原因,没有接受有用的答案,以及标题中的一个重要错字,我不想修复,因为它似乎只是粗心大意发帖者的角色。

标签: c scanf


【解决方案1】:

使用lf 转换说明符来读取double 值,而不是使用f 转换说明符来读取float 值。 fscanffprintf 函数在这方面是不对称的。

【讨论】:

    【解决方案2】:

    您必须使用%lf%g 来提取双精度,而不是%f

    【讨论】: