Как считать значения с клавиатуры ,не используя Scanf ,когда пишешь код на С и работаешь с целочисленными значениями

Не допираю как считать значения с клавиатуры ,без использования Scanf Подскажите что-то ,что поможет это сделать.


Ответы (1 шт):

Автор решения: Sergey

как считать значения с клавиатуры ,без использования Scanf

Как-то так:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>

int main (int argc, char *argv[]) {

    long int val;
    char buf[128];
    char *cp, *endptr;
    
    /* Вводим строку */
    printf("Введите значение : ");
    cp = fgets(buf, 128, stdin);
    if (cp == NULL) {
       printf("Ошибка ввода!\n");
       return -1;
    }

    /* Строку преобразуем в целое значение*/
    errno = 0;
    val = strtol(buf, &endptr, 10);

    /* Были ошибки при преобразовании ? */
    if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
        || (errno != 0 && val == 0)) {
        perror("strtol");
        exit(EXIT_FAILURE);
    }

    /* А вообще - цифры были ? */
    if (endptr == buf) {
       fprintf(stderr, "Цифры отсутствуют\n");
       exit(EXIT_FAILURE);
    }

    /* strtol() успешно преобразовала число */
    printf("Введено значение %ld\n", val);
}

Вместо strtol можно было бы использовать atoi. Это было бы гораздо проще, но тогда невозможно узнать, что при вводе произошла ошибка.

→ Ссылка