Мне надо вот что: repeat writeln("hello world"); until keypressed; Это на паскале, а на си? Ncurses просмотрел кратко и что-то не хочется вставлять такую здоровую библиотеку только ради этого разве по другому нельзя. getc помоему тут не подойдет.
Проблема в том, что твоя программа не знает, что за терминал к ней подсобачен. Это ж не ДОС! Ты можешь гонять программу на суперкмпутере в Штатах, сидя за телетайпом в избушке зимовщиков на Северном полюсе.
Чтобы сделать аналог твоей програмки, тебе надо: Узнать, посволяет ли tty такое сделать, перевести его в подходящую моду, слушать его каким-либо средством типа селекта.
ncurses все это берет на себя. Конечно, можно самому извращаться, если не лень возится - вперед! Скорее всего то, что у тебя получится, будет работать только при определенных условиях.
Не все так плохо, как говорит 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