Записать цифры из символьной переменной в вещественную - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Как можно решить задачку? Возможно ли как то изменить тип переменной? С клавиатуры вводится некая строка ( char str[50] ), нужно проверить, записаны ли в неё только цифры, если записаны, то записать их в переменную типа double.

Решение задачи: «Записать цифры из символьной переменной в вещественную»

textual
Листинг программы
#include <stdio.h>
 
/* Даёшь велосипеды!!! */
#define my_is_digit(c) ( (c) >= '0' && (c) <= '9' )
 
int string2double(const char * str, double * val) {
    int sign = 1;
    int pointFound = 0;
    int afterPoint = 0;
    double result = 0.0;
    
    if ( *str == '-' ) {
        sign = -1;
        ++str;
    }
    else if ( *str == '+' )
        ++str;
        
    while ( *str ) {
        if ( *str == '.' ) {
            if ( ++pointFound > 1 )
                return -1;
        }
        else if ( ! my_is_digit(*str) )
            return -1;
        else {
            result = result * 10.0 + *str - '0';
            if ( pointFound )
                ++afterPoint;
        }
        
        ++str;
    }
        
    /* и никаких pow из math.h! */
    while ( afterPoint-- )
        result /= 10.0;
        
    *val = result * sign;
    
    return 0;
}
 
/* ну нравится мне так строки объявлять...*/
typedef char string_t[256];
#define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
 
int main(void) {
    string_t str;
    double value;
    
    while ( printf("Number: ") && get_string(str) ) {
        if ( string2double(str, &value) )
            printf("Wrong input!\n");
        else
            printf("Got number %f\n", value);
    }
    
    return 0;
}

Объяснение кода листинга программы

  1. Преобразование строки в число с плавающей точкой, используя функции стандартной библиотеки языка C.
  2. Код использует функцию string2double, которая принимает два аргумента: указатель на строку и указатель на переменную типа double.
  3. Функция проверяет, является ли первый символ строки знаком плюс или минус и игнорирует его, если это так.
  4. Затем функция проверяет, есть ли в строке десятичная точка. Если она есть, функция проверяет, что она встречается не более одного раза.
  5. Далее функция проверяет каждый символ строки, чтобы убедиться, что он является цифрой. Если это не так, функция возвращает значение, указывающее на ошибку.
  6. Если все символы являются цифрами, функция преобразует строку в число с плавающей точкой, используя функцию atof.
  7. Если в строке была десятичная точка, функция выполняет деление на 10 для каждого дополнительного десятичного разряда.
  8. В конце функция возвращает преобразованное число с плавающей точкой, умноженное на -1, если знак был минус.
  9. В функции main используется цикл while, который продолжается до тех пор, пока пользователь не введет что-то, что не является числом.
  10. При каждом вводе числа программа отображает его преобразованное значение. Если ввод некорректен, программа выводит сообщение об ошибке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы