Дана строка. Если она представляет собой запись целого числа, то вывести 1 - C (СИ) (73547)
Формулировка задачи:
под словом "текст" понимается строка символов,
слова в которой, разделены пробелами, " , "," . "," !
"," ? "," ; "," : " (одним или несколькими).
Дана строка. Если она представляет собой запись целого числа, то вывести 1; если
вещественного (с дробной частью), то вывести 2; если строку нельзя
преобразовать в число, то вывести 0.
Решение задачи: «Дана строка. Если она представляет собой запись целого числа, то вывести 1»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- typedef enum NUMBERTYPE { NT_NAN = 0, NT_INTEGRAL = 1, NT_REAL = 2 } numbertype_t;
- numbertype_t test_number(const char * data) {
- long integral;
- double real;
- char * tail;
- errno = 0;
- integral = strtol(data, &tail, 10);
- if ( ! ( errno || *tail ) )
- return NT_INTEGRAL;
- errno = 0;
- real = strtod(data, &tail);
- if ( ! ( errno || *tail ) )
- return NT_REAL;
- return NT_NAN;
- }
- typedef char shortstring_t[256];
- #define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
- int main(void) {
- shortstring_t str;
- while ( printf("Data: ") && get_string(str) ) {
- switch(test_number(str)) {
- case NT_NAN :
- printf("Not a number.\n");
- break;
- case NT_INTEGRAL :
- printf("Integral type.\n");
- break;
- case NT_REAL :
- printf("Real type.\n");
- break;
- default :
- printf("Unknown error!\n");
- break;
- }
- }
- return 0;
- }
Объяснение кода листинга программы
- Объединение всех исходных файлов в один исполняемый файл.
- Заголовочный файл
используется для ввода и вывода данных в консоль. - Заголовочный файл
используется для использования функций для работы с числами и строками. - Заголовочный файл
используется для работы с ошибками. - Создание перечисления (enum) с именем NUMBERTYPE и значениями NT_NAN, NT_INTEGRAL и NT_REAL.
- Функция test_number принимает строку в качестве входного параметра и возвращает тип числа (NT_NAN, NT_INTEGRAL или NT_REAL).
- Внутри функции test_number определяется переменная integral типа long, которая будет использоваться для хранения целого числа.
- Внутри функции test_number определяется переменная real типа double, которая будет использоваться для хранения числа с плавающей точкой.
- Внутри функции test_number определяется переменная tail типа char*, которая будет использоваться для хранения указателя на последнюю симво в строке.
- Внутри функции test_number выполняется преобразование строки в целое число с помощью функции strtol.
- Внутри функции test_number выполняется преобразование строки в число с плавающей точкой с помощью функции strtod.
- Внутри функции test_number возвращается значение NT_NAN, если не удалось преобразовать строку ни в целое число, ни в число с плавающей точкой.
- Создание массива символов (char array) с именем str, который будет использоваться для хранения строки, введенной пользователем.
- Функция get_string используется для ввода строки с помощью сканера.
- В цикле while пользователю предлагается ввести строку.
- Если пользователь вводит строку, то выполняется проверка ее типа с помощью функции test_number.
- В зависимости от типа числа выводится соответствующее сообщение на экран.
- Если произошла ошибка при вводе строки, то цикл while прекращается.
- Программа возвращает 0, если все введено корректно, иначе возвращается 1.
- Код программы не содержит компонентов, которые могут работать с файлами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д