Код непрерывного ввода с помощью клавиш со стрелками. Почему выходные данные многократно отступают?
Я пишу на C, используя библиотеку lncurses. Мне нужно получить непрерывный ввод с помощью клавиш со стрелками, но мой вывод все странно и предназначено. Я попытался поменять \n
на \r
, но тогда он вообще ничего не выводил, даже если нажата клавиша регистрации.
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
#include <pthread.h>
void *input(void *arg)
{
printf("Thread running\r\n");
int ch = 0;
while(1)
{
ch = getch();
switch(ch)
{
case KEY_UP :
printf("up\n");
break;
case KEY_DOWN :
printf("down\r");
break;
case KEY_LEFT :
printf("left\r");
break;
case KEY_RIGHT:
printf("right\r");
break;
}
}
return NULL;
}
void initcurses();
int main(int argc, char *argv[])
{
//Initialise ncurses library functions
initcurses();
pthread_t t_input;
pthread_create(&t_input, NULL, input, NULL);
pthread_join(t_input, NULL);
}
void initcurses()
{
//Initialise library
initscr();
//Enable control characters
cbreak();
//Disable getch echoing
noecho();
//Flush terminal buffer
intrflush(stdscr, TRUE);
//Enable arrow keys
keypad(stdscr, TRUE);
}
Я ожидаю увидеть, какая клавиша нажимается на новой строке каждый раз.
Вместо этого они имеют отступ.
Код должен быть достаточным для воспроизведения результата.
Компилировать с cc -pthread -o file file.c -lncurses
Также некоторые примечания: KEY_UP
- это единственное, что будет иметь какой-либо вывод из-за символа \n
? Любые другие клавиши будут напечатаны после нажатия UP
после них.