Дана строка. Если она представляет собой запись целого числа, то вывести 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;
}

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

  1. Объединение всех исходных файлов в один исполняемый файл.
  2. Заголовочный файл используется для ввода и вывода данных в консоль.
  3. Заголовочный файл используется для использования функций для работы с числами и строками.
  4. Заголовочный файл используется для работы с ошибками.
  5. Создание перечисления (enum) с именем NUMBERTYPE и значениями NT_NAN, NT_INTEGRAL и NT_REAL.
  6. Функция test_number принимает строку в качестве входного параметра и возвращает тип числа (NT_NAN, NT_INTEGRAL или NT_REAL).
  7. Внутри функции test_number определяется переменная integral типа long, которая будет использоваться для хранения целого числа.
  8. Внутри функции test_number определяется переменная real типа double, которая будет использоваться для хранения числа с плавающей точкой.
  9. Внутри функции test_number определяется переменная tail типа char*, которая будет использоваться для хранения указателя на последнюю симво в строке.
  10. Внутри функции test_number выполняется преобразование строки в целое число с помощью функции strtol.
  11. Внутри функции test_number выполняется преобразование строки в число с плавающей точкой с помощью функции strtod.
  12. Внутри функции test_number возвращается значение NT_NAN, если не удалось преобразовать строку ни в целое число, ни в число с плавающей точкой.
  13. Создание массива символов (char array) с именем str, который будет использоваться для хранения строки, введенной пользователем.
  14. Функция get_string используется для ввода строки с помощью сканера.
  15. В цикле while пользователю предлагается ввести строку.
  16. Если пользователь вводит строку, то выполняется проверка ее типа с помощью функции test_number.
  17. В зависимости от типа числа выводится соответствующее сообщение на экран.
  18. Если произошла ошибка при вводе строки, то цикл while прекращается.
  19. Программа возвращает 0, если все введено корректно, иначе возвращается 1.
  20. Код программы не содержит компонентов, которые могут работать с файлами.

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


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

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

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