Дана строка. Если она представляет собой запись целого числа, то вывести 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.
- Код программы не содержит компонентов, которые могут работать с файлами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д