为以下代码输入大数字会导致scanf
成功,尽管该值未被正确存储。scanf成功,但存储的值对于某些大型浮点数不适用
printf("\nDouble max: %f\n", DBL_MAX);
printf("\nFloat max: %f\n", FLT_MAX);
printf("\nPlease insert root1 data: ");
float input1;
scanResult = scanf("%f", &input1);
printf("\nScan Result is %d\n", scanResult);
double input2;
printf("\nPlease insert root2 data: ");
scanResult = scanf("%lf", &input2);
printf("\nScan Result is %d\n", scanResult);
printf("%f", input1);
printf("%f", input2);
输出:
Double max: 17976931348623157000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000
0.000000
Float max: 340282346638528860000000000000000000000.000000
Please insert root1 data: 1872389723948273985723984756982375698374568
Scan Result is 1
Please insert root2 data: 928734812348721834.2348275
Scan Result is 1
1.#INF00
928734812348721790.000000
所以我的问题是:
首先扫描:为什么
scanf
还是要说的扫描结果为1,当你可以看到,价值存储不正确?第二次扫描:为什么它会舍入它,我该如何解决它?
一般:我们可以看到,通过0的数量,该和
FLT_MAX
比我给的输入大得多。那为什么它不正确地存储输入?
您需要更好的'c'书籍(或网站) – KevinDTimm
@KevinDTimm我可以理解为什么吗? –
对于scanf()有关溢出处理的有趣问题+1。这不仅抵消了你不努力验证你的输入;-)。 –