2010-01-01 3 views

ответ

2

Почему вы потеряете номер с getchar?

  1. прочитанной символы с GetChar, пока вы нажмете пробел/ввод/конец ввода
  2. Соберите их все в одну строку
  3. Используйте strtod, чтобы убедиться, что это действительное значение с плавающей точкой
  4. Count цифр в строка - либо до, либо после точки, что вам нужно.

Если вы ограничены только getchar:

  1. Читать обугливает один на один с getchar
  2. Держите состояние, где вы находитесь в количестве: до того десятичной точки, в десятичной точки, или после
  3. Продолжайте считать цифры до тех пор, пока это допустимое число с плавающей запятой (т.е. 1 или более цифр, а затем необязательно десятичная точка с 1 или более цифрами после нее)
  4. Соберите цифры int o число с плавающей запятой путем сдвига мощности 10 (т.е. до десятичной точки умножить на 10,0 и добавить новое число, после десятичной точки делить на растущую мощность 10 и добавить).
+0

извините, если я не был чист, я не могу использовать строки. я могу сохранить только символ (только по одному) или число (ограниченное использованием только scanf и getchar). –

+0

обновил мой ответ HTH. так как это вопрос HW, чтобы получить дополнительную помощь, вы действительно должны опубликовать собственный код и обратите внимание на то, что у вас есть проблема с –

+0

. Чтобы разобрать 0.123, лучше прочитать часть «123» как целое число и разделите его на 1000 за один шаг. Поскольку ни один из 0,1, 0,02 или 0,003 не представлен как поплавок IEEE 754, ваш метод накапливает больше ошибок округления, чем это необходимо. –

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; 
} 
Смежные вопросы