输入小数点后的一位数

时间:2015-07-27 14:10:28

标签: c floating-point scanf

如何使用C语言的scanf在小数点后面的一位数(0.1)上取一个浮点数?例如,用户可以键入3.25405 ...但是在变量中只会保存3.2。我怎样才能做到这一点 ?这与舍入浮点数不同。

3 个答案:

答案 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') 显然,如果你知道在'之前你将会有一个只有一位数的数字。'

干杯,