2010-01-01 96 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; 
}