我是否使用了错误的转换说明符?scanf()不是';t在c中工作
在c中使用以下代码行时,scanf()无法正常工作:我是否使用了错误的转换说明符?scanf()不是';t在c中工作,c,scanf,C,Scanf,在c中使用以下代码行时,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("%.
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);
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
提取的输出总是这样:
1
0.00
请帮忙。这对我来说太疯狂了 是的,您的代码是错误的。不能将精度(
“
)用于fscanf()
族,这是无效的。这导致了
引用C11
,第§7.21.6.2/p3章,fscanf()
每个转换规范都由字符%
引入。
在%
之后,将依次显示以下内容:
-抑制字符*
的可选赋值
-大于零的可选十进制整数,用于指定最大字段宽度
(以字符表示)
-指定接收对象大小的可选长度修改器
-一种转换说明符字符,用于指定要应用的转换类型
第13页
如果转换规范无效,则行为未定义
也就是说,不要使用试错法,这是很难捕捉和理解的。阅读手册页面,了解任何参数类型的正确格式说明符。正如编译器告诉您的那样
warning: unknown conversion type character ‘.’ in format [-Wformat=]
因此,您无法使用这种格式说明符指定精度,以下方法可能有效
#include <stdio.h>
#include <math.h>
int main()
{
double withdraw = 0;
scanf("%lf", &withdraw);
printf("\n\nWithdraw %.2lf?", withdraw);
return 0;
}
#包括
#包括
int main()
{
双退=0;
scanf(“%lf”,&draw);
printf(“\n\n使用Draw%.2lf?”,撤消);
返回0;
}
printf(“\n\nWithdraw%.2lf?”,&Draw)代码>-->printf(“\n\nWithdraw%.2lf?”,撤消)代码>…删除打印调用中的&
。我已经尝试了所有4个版本的已发布代码块,这就是为什么我觉得它很有趣的原因。代码的第3个变体满足您的要求,仍然输出0。00@Teddy...eh? 转换规范是否仍然无效?为什么不检查scanf()
中的返回值?它没有返回1
,是吗?经常检查输入操作的状态-确保你得到了你期望得到的,如果你没有得到,就做点什么。“非常感谢你们!我通过取消scanf()中的精度修复了我的问题@Yunnosch感谢你的评论,我已经做了修改,尽管我坚信前面的修改是完全合理的,学习的第一步是学会承认错误并愿意改正。如果,iff,有一种文化阻止了这一点,我不太确定未来是否会继续走这条路。没有怨恨,没有私事。我使用的是Dev-C++编译器一定很糟糕,因为它没有捕获它。@TeddyBearWithACape您必须在编译器中使用-Wall
选项。最好使用的-Wall-Wextra-pedantic
@TeddyBearWithACape Dev-C++是一个IDE,而不是一个编译器。您的编译器可能是gcc
。我知道Dev-Cpp是一个IDE,这就是为什么说编译器不是Dev-Cpp。知道它可能是gcc
很有用。请解释差异及其原因。另外,“可以工作”听起来像是未经测试的,我相信这不是你的意思。也许“这对你有用,诀窍是……”。只是为了更好地感谢您的帮助性回答。@Yunnosch谢谢您的建议。原因是不能在scanf中使用“.”。