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

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);
}

12   голосов, оценка 4.167 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы