如何使用C语言的scanf在小数点后面的一位数(0.1)上取一个浮点数?例如,用户可以键入3.25405 ...但是在变量中只会保存3.2。我怎样才能做到这一点 ?这与舍入浮点数不同。
答案 0 :(得分:1)
我不认为你可以在一次通过中做到这一点,因为scanf没有像printf那样的'precision'选项。所以我会这样做:
int m, n;
float f;
scanf("%d.%1d", &m, &n);
if (m >= 0)
f=(float)m + ((float)n)/10;
else
f=(float)m - ((float)n)/10;
希望它有所帮助。
我已根据下面的纪念修复了初始解决方案
答案 1 :(得分:1)
使用fgets()
读取并对缓冲区进行后处理。 @DevSolar
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOF();
char *p = strchr(buf,'.');
if (p && isdigit(p[1])) p[2] = 0;
char *endptr;
double y = strtod(buf, &endptr);
...
更好地提醒用户忽略其他输入。
if (p && isdigit(p[1])) {
if (p[2] && p[2] != '\n') puts("Extra input ignored.");
p[2] = 0;
}
char *endptr;
double y = strtod(buf, &endptr);
答案 2 :(得分:0)
scanf("%3f",&float_var);
当' 3'适用于3.2的三个字符(' 3' +'。' +' 2') 显然,如果你知道在'之前你将会有一个只有一位数的数字。'
干杯,