Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного - 2 - C (СИ)

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

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

Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2; если строку нельзя преобразовать в число, то вывести 0. Простите, я уже постила эту задачу. И мне ее решили. Но там все очень сложно. Все , что там было - мы не проходили в универе. Я все же надеюсь, что кто-то сможет помочь мне ее написать простым понятным кодом, иначе я просто свихнусь(((( Приложу коды, как ее делали, но(еще раз повторюсь) меня препод на части разорвет , если это увидит. за этот код благодарю @schdub
#include <stdio.h>
#include <stdlib.h>
 
int GetNumType(const char * p) {
    if (*p == '\0') return 0;
    int float_sep = 0;
    for (;*p; ++p) {
        if (!isdigit(*p)) {
            if (*p == '.') ++float_sep; else return 0;
        }
    }
    if (float_sep == 0) return 1;
    return ((float_sep == 1 && p[-1] != '.') ? 2 : 0);
}
 
void test(const char * num) {
    printf("%d '%s'\n", GetNumType(num), num);
}
 
int main() {
    test("1");
    test("1.0");
    test("1abc");
    test("0.0");
    test(".0");
    test("0.");
    return 0;
}
за этот спасибо @easybudda
#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»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main() {
    char str[256];
    scnaf("%s", str);
    int length = strlen(str);
    int type = 1;
    for (int i=0; i < length; ++i) {
        if (str[i] == '.') {
            if (type == 2) {
                type = 0;
                break;
            } else {
                 type = 2;
            }
        } else {
            if (str[i] < '0' || str[i] > '9') {
                type = 0;
                break;
            }
        }
    }
    printf("type = %d\n", type);
}

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

В этом коде:

  1. Объявлены две переменные: строка str и целочисленная переменная length.
  2. Вводится строка с помощью функции scanf.
  3. Вычисляется длина строки с помощью функции strlen.
  4. Инициализируется переменная type значением 1.
  5. В цикле for перебираются все символы строки.
  6. Если текущий символ равен точке (str[i] == '.'), то проверяется значение переменной type.
  7. Если type равно 2, то значение переменной type сбрасывается в 0 и цикл прерывается.
  8. Если type равно 1, то значение переменной type меняется на 2.
  9. Если текущий символ не равен точке (str[i] != '.'), то проверяется, является ли он цифрой.
  10. Если текущий символ не является цифрой (str[i] < '0' || str[i] > '9'), то значение переменной type сбрасывается в 0 и цикл прерывается.
  11. После завершения цикла выводится значение переменной type. Этот код проверяет, является ли введенная строка числом с плавающей точкой или числом с фиксированной точкой. Если это число с плавающей точкой, выводится 2, если число с фиксированной точкой, выводится 1. Если строка не является числом, выводится 0.

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


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

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

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