scanf()无法正常工作
double withdraw = 0;
scanf("%.2lf",&withdraw);
printf("\n\nWithdraw %.2lf?",&withdraw);
和此:
double withdraw = 0;
scanf("%.2lf",withdraw);
printf("\n\nWithdraw %.2lf?",withdraw);
和此:
double withdraw = 0;
scanf("%.2lf",&withdraw);
printf("\n\nWithdraw %.2lf?",withdraw);
最后这个:
double withdraw = 0;
scanf("%.2lf",withdraw);
printf("\n\nWithdraw %.2lf?",&withdraw);
输入到scanf()总是这样:
1
退出的输出总是这样:
0.00
请帮忙。这对我来说太疯狂了!
答案 0 :(得分:4)
是的,你的代码错了。您不能对".<int>"
系列使用精度(fscanf()
),这是无效的。这会导致undefined behavior。
引用C11
,章节§7.21.6.2/ p3, fscanf()
每个转换规范都由字符
%
引入。 在%
之后,以下顺序出现:- 可选分配抑制字符
*
。- 大于零的可选十进制整数,指定最大字段宽度 (字符)。
- 可选长度修饰符,用于指定接收对象的大小。
- 转换说明符字符,指定要应用的转换类型。
和,p13
如果转换规范无效,则行为未定义。
那就是说,不要使用反复试验,undefined behaviors很难捕捉和理解。阅读手册页,了解任何参数类型的正确格式说明符。
答案 1 :(得分:0)
正如你的编译器告诉你的那样
warning: unknown conversion type character ‘.’ in format [-Wformat=]
因此,您无法使用此类型的格式说明符
指定精度答案 2 :(得分:0)
以下内容可行。
#include <stdio.h>
#include <math.h>
int main()
{
double withdraw = 0;
scanf("%lf", &withdraw);
printf("\n\nWithdraw %.2lf?", withdraw);
return 0;
}