shpi0 Опубликовано 13 октября, 2006 Жалоба Поделиться Опубликовано 13 октября, 2006 В-общем, пишу я такую вещь: надо чтобы нажатая клавиша выводилась на экран, но не просто, а большого размера. Вот тут сорцы: http://www.shpi0.ru/lab3.zip А вот в чем собственно проблема. Вот основная функция программы: int main() { tKey KeyPressed=KT; init_term(); cursor(0); ClearScreen(); SetColor(Cyan,Black); while (KeyPressed!=KQ) { ClearScreen(); printf("Press one of this keys: T, Z, Y, F, I. (Q to quit).\n"); DrawLetter(KeyPressed); KeyPressed=readkey(); } DrawLetter(KeyPressed); SetColor(White,Black); restore_term(); cursor(1); return 0; }Вот функция readkey()tKey readkey (void) { char input_char; int read_chars; while ((read_chars = read (INPUT_STREAM, &input_char, 1)) > 0){ switch (input_char){ case 'T': return (KT); case 't': return (KT); case 'Y': return (KY); case 'y': return (KY); case 'I': return (KI); case 'i': return (KI); case 'F': return (KF); case 'f': return (KF); case 'Z': return (KZ); case 'z': return (KZ); case 'L': return (KL); case 'l': return (KL); case 'q': return (KQ); case 'Q': return (KQ); default: return (KUNDEF); } } return (KUNDEF); }Я не пойму почему так, но у меня как бы кнопка нажатая считывается каждую секунду. То есть вот если я сделал проверку на правильность кнопки (надо только 6 букв чтобы выводилось), то при нажатии на нужную кнопку все работает - но через секунду сбрасывается с сообщением о том что нажата неправильная кнопка. Насколько я понял здесь еще что-то с терминалом связано. Вот функция инициализации терминала: int init_term (void) { if (!isatty (INPUT_STREAM) || !isatty (OUTPUT_STREAM)) return (1); if (WinSize()) return (1); if (tcgetattr (INPUT_STREAM, &old_tcset) == -1 || tcgetattr (INPUT_STREAM, &new_tcset) == -1) return (1); new_tcset.c_iflag &= 0; new_tcset.c_lflag &= ~(ICANON | ECHO); new_tcset.c_cc[VMIN] = 0; new_tcset.c_cc[VTIME] = 10; if (tcsetattr (INPUT_STREAM, TCSAFLUSH, &new_tcset) == -1) return (1); return (0); }Когда я изменяю new_tcset.c_cc[VTIME], соответственно меняется и время пока нажатая клавиша самопроизвольно не считывается. Помогите пожалуйста, сдавать на той неделе уже... Да и самому интересно разобраться Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.