Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Проверка числа при вводе scanf

#cpp #c


Вопрос такой:
Как считать с консоли целое число, которое влезает в диапазон int?
То есть, как обработать ситуацию ввода с консоли большой последовательности чисел
которая не влезает в int?

scanf_s("%d", &n)


Вводим сюда 9999999999999999999999999999999999 например и получаем нестабильную работу
программы.
Как с этим бороться?
    


Ответы

Ответ 1



Не используйте scanf_s() используйте функции read() getc() fgets() проверяйте введенный массив, а потом преобразуйте int в char используй stroul()

Ответ 2



Тип int и правда платформозависимый. Размер int(и не только) для Вашего ПК можно узнать через функцию sizeof(). Она описана в stdio.h Пример: /* кол. байтов на данном ПК для разных типов данных */ printf("int = %lu, float = %lu, double = %lu \n", sizeof(int), sizeof(float), sizeof(double)); Сравнивая размер вводимых чисел с размеров ячейки для Вашего ПК можно отсечь ИМХО ненужное (не int).

Ответ 3



Платформонезависивомого решения для языков С и С++ вы не найдете эти языки переполнение типа не считают ошибкой и исключительных ситуаций для этого не предусмотрено. Выход только один это писать свой платформозависимый обработчик на ассемблере, в процессоре для этого есть флаг переполнения в регистре флагов вот его то и можно использовать.

Комментариев нет:

Отправить комментарий