scanf ("%.2f",&tall);
printf ("%.2f",tall);
上面打不出正确的答案
但是把scanf的.2f换成f就没问题,想问一下原因
scanf()格式转换的一般形式是
%[*][size][l][h]type
其中括号里的参数可选
size 为允许参数输入的数据长度
如果是scanf ("%.2f",&tall);
那么电脑会认为你要读入一个0.2位的数
但是那是不可能的
所以就输出0.00啦
scanf函数读取浮点数时,格式字符串中的%.2f表示要读取一个精确到小数点后两位的浮点数。而使用%f则表示读取一个普通的浮点数。
当你使用%.2f作为格式字符串时,scanf函数会尝试按照该格式读取输入的浮点数。如果输入的浮点数不符合该格式(例如输入的浮点数只有一位小数或没有小数),那么scanf函数会失败,返回一个非零值,并且不会对tall变量进行赋值。因此,当你尝试打印tall变量的值时,它仍然保持着初始值,而不是你输入的浮点数。
相反,如果你使用%f作为格式字符串,scanf函数会尝试读取一个普通的浮点数,即使输入的浮点数没有小数部分,也不会导致scanf函数失败。因此,tall变量会成功地被赋予输入的浮点数的值,你可以正确地打印出tall的值。
如果在输入中有scanf中出现的非控制字符(可以自行设置格式字符串),则这些字符会被跳过。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,m; char c; float f;
scanf("%d %c,%f:%d",&n,&c,&f,&m); //输入中对应位置的 空格 , :会被跳过
printf("%d,%c,%f,%d",n,c,f,m);
return 0;
}
问题分析: 根据参考资料和已有知识,scanf函数在读取浮点数时,使用%.2f格式会导致错误的输出。而使用f格式则没有这个问题。原因可能是%.2f格式在读取浮点数时的机制不同。
解决方案: 1. 使用%.2f格式读取浮点数时,首先确定输入的浮点数是否是正确的,即是否按照浮点数的格式输入。可以使用字符串来输入浮点数,然后通过sscanf函数将字符串转换为浮点数。
#include <stdio.h>
int main()
{
float f;
char input[10];
printf("请输入一个浮点数: ");
fgets(input, sizeof(input), stdin); // 读取输入的字符串
sscanf(input, "%f", &f); // 将字符串转换为浮点数
printf("输入的浮点数为: %.2f\n", f);
return 0;
}
这样可以避免使用scanf函数读取浮点数时可能出现的问题。
#include <stdio.h>
int main()
{
float f;
char input[10];
printf("请输入一个浮点数: ");
fgets(input, sizeof(input), stdin); // 读取输入的字符串
sscanf(input, "%f", &f); // 将字符串转换为浮点数
printf("输入的浮点数为: %.2f\n", f);
return 0;
}
这样可以确保输入的浮点数按照正确的格式输入,避免使用scanf函数时可能出现的问题。
综上所述, 可以采取上述两种方案解决该问题。