Записать цифры из символьной переменной в вещественную - 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; }
Объяснение кода листинга программы
- Преобразование строки в число с плавающей точкой, используя функции стандартной библиотеки языка C.
- Код использует функцию
string2double
, которая принимает два аргумента: указатель на строку и указатель на переменную типаdouble
. - Функция проверяет, является ли первый символ строки знаком плюс или минус и игнорирует его, если это так.
- Затем функция проверяет, есть ли в строке десятичная точка. Если она есть, функция проверяет, что она встречается не более одного раза.
- Далее функция проверяет каждый символ строки, чтобы убедиться, что он является цифрой. Если это не так, функция возвращает значение, указывающее на ошибку.
- Если все символы являются цифрами, функция преобразует строку в число с плавающей точкой, используя функцию
atof
. - Если в строке была десятичная точка, функция выполняет деление на 10 для каждого дополнительного десятичного разряда.
- В конце функция возвращает преобразованное число с плавающей точкой, умноженное на -1, если знак был минус.
- В функции
main
используется циклwhile
, который продолжается до тех пор, пока пользователь не введет что-то, что не является числом. - При каждом вводе числа программа отображает его преобразованное значение. Если ввод некорректен, программа выводит сообщение об ошибке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д