LINUX.ORG.RU

Странный вопрос


0

0

Блин. Как на си сделать так чтобы например пока не нажата клавиша любая, выводилась например строка Hello а после нажатия выход из программы. Пасибо.

anonymous

Странный ответ:

Если именно до "нажал клавишу", то ncurses тебе поможет. man ncurses, если ты еще не понял.

А если под клавишей подразумевается Enter, то man getc, man fork - решение "в лоб" :-)

no-dashi ★★★★★
()

Мне надо вот что: repeat writeln("hello world"); until keypressed; Это на паскале, а на си? Ncurses просмотрел кратко и что-то не хочется вставлять такую здоровую библиотеку только ради этого разве по другому нельзя. getc помоему тут не подойдет.

Поправьте меня если я не прав.

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

Ncurses - самое простое решение.

Проблема в том, что твоя программа не знает, что за терминал к ней подсобачен. Это ж не ДОС! Ты можешь гонять программу на суперкмпутере в Штатах, сидя за телетайпом в избушке зимовщиков на Северном полюсе.

Чтобы сделать аналог твоей програмки, тебе надо: Узнать, посволяет ли tty такое сделать, перевести его в подходящую моду, слушать его каким-либо средством типа селекта.

ncurses все это берет на себя. Конечно, можно самому извращаться, если не лень возится - вперед! Скорее всего то, что у тебя получится, будет работать только при определенных условиях.

Die-Hard ★★★★★
()

Не все так плохо, как говорит Die-Hard. Дисциплиной линии (line
discipline) рулит все-таки ядро, а не терминал. А посему:


#include <stdio.h>
#include <unistd.h>
#include <termios.h>

struct termios t;
tcgetattr(STDIN_FILENO, &t);
t.c_lflag &= ~(ECHO | ICANON);
t.c_cc[VMIN] = 0;
t.c_cc[VTIME] = 1;     //100 мс ожидания на read
tcsetattr(STDIN_FILENO, TCSAFLUSH, &t);

do puts("Hello, World!");
while (!read(STDIN_FILENO, &t, 1));


Только про error-checking не забывать, потому что stdin вполне
может оказаться не терминалом. Подробнее обо всем этом (и многом
другом) можно прочитать по команде:

info libc

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