2010-01-01 102 views
0

我需要从浮点数中计数数字并保留该数字。我可以使用scanf为%f或%c,但不是%s,我可以使用getchar()。 我可以使用getchar,但不适用宽松的号码计数浮点数(hw)C

回答

2

为什么你会丢失号码getchar

  1. 在使用getchar读取字符,直到你打空格/输入/输入端
  2. 将它们收集齐全成一个字符串
  3. 使用strtod,以确保它是一个有效的浮点值
  4. 计数位数字符串 - 无论您需要什么,在点之前或之后。

如果你只限于getchar

  1. 读取字符逐个getchar
  2. 请你在数,其中的一个状态:之前小数点,在小数点,或之后
  3. 只要它是有效的浮点数(即1个或更多数字,然后可选地包含1个或更多数字的小数点),继续计数数字
  4. 收集数字int ○通过移位10的幂(即,小数点前乘以10.0并添加新的数字,小数点后除以10的增长幂并加上)。
+0

对不起,如果我不清楚,我不能使用字符串。我只能保存一个字符(一次只有一个)或一个数字(仅限于使用scanf和getchar) – 2010-01-01 08:18:13

+0

已更新我的答案HTH。因为这是一个硬件问题,为了获得更多的帮助,你应该发布一些你自己的代码,并确切地注意你的问题 – 2010-01-01 08:25:21

+0

解析0.123是更好的读取“123”部分作为一个整数和一步将它除以1000。由于IEEE 754浮点数不能表示0.1,0.02或0.003,因此您的方法会累积更多的舍入误差。 – 2010-01-01 08:46:13

1

正如我看到你已经得到了你的答案,但这是否也适用于你?

#include <stdio.h> 


int main() 
{ 
    char *str = new char[30]; 
    float flt; 
    int count = 0; 

    scanf("%f", &flt); 
    printf("number you entered is: %f\n", flt); 
    sprintf(str, "%f", flt); 

    for(;str[count] != '\0'; count++); 

    printf("%f have %d digits", flt, count-1); 
    return 0; 
}