LINUX.ORG.RU

getche в терминале (gcc)

 , , ,


0

1

Требуется написать защиту от дурака на си, суть в том, чтобы выполнялась проверка на тип символов(разрешены только целые числа) и длину строки (не больше 3 символов). Пробовал инициализировать строку, выделял память на 3+1 символа, затем через scanf водил строку, после чего выполнялась проверка на символы и длину по-элементно. Но когда я вводил числа типа «9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...9999», то буфер строки переполнялся и программа завершалась с ошибкой. Выделять память в 9999...999 символов не считаю правильным решением. После всех проб решил попробовать getche, но в gcc его походу нет, скачал библиотеку ncurses.h, тоже не помогло. Как можно решить эту проблему и есть ли аналоги getche для gcc?

Ответ на: комментарий от anonymous

Может ещё Visual Studio — это не компилятор?

anonymous ()
Ответ на: комментарий от anonymous

Если getchar использовать, то придется нажимать enter, а это значит, что пользователь сможет снова писать 999...999 и снова переполнять буфер строки.

kennydzzze ()
Ответ на: комментарий от Gorthauer

Кого-то удивляет 1%?

В ЖМУ/Пинус даже conio.h не завезли.

anonymous ()
Ответ на: комментарий от kennydzzze

Новоприбывшим напоминаю, что, в отличие от большинства ресурсов, на этом правилами запрещено врать. Как люди живут вне ЛОРа — ума не приложу.

char c[4];
int i;
fgets(c, 3, stdin);
sscanf(c, "%d", &i);

тебе такое надо?

t184256 ★★★★★ ()
Ответ на: комментарий от KennyMinigun

на этом уровне и небо и аллах — это число. файлами они становятся в чуть более высокоуровневых плоскостях бытия.

t184256 ★★★★★ ()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от kennydzzze

Возможно я не корректно выразился, ибо не совсем пока понимаю предназначение файла этого и что он из себя представляет.

kennydzzze ()
Ответ на: комментарий от t184256

Окей, раз пошли такие тонкости, то file descriptor — число (и то, исключительно в *nix), file handle — структура (т.е. абстракция), с которой работают функции из стандартной библиотеки C. В fgets используется file handle.

KennyMinigun ★★★★★ ()
Ответ на: комментарий от t184256

В сыром виде структура FILE нигде не используется, по этому при написании «file handle» подразумевают «FILE *».

P.S. Ну да, а указатель — это число. Понял намек ;)

KennyMinigun ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.