Как исправить отступы нежелательных проклятий - PullRequest
0 голосов
/ 08 апреля 2019

Код непрерывного ввода с помощью клавиш со стрелками. Почему выходные данные многократно отступают?

Я пишу на 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 после них.

1 Ответ

0 голосов
/ 08 апреля 2019

Как заметил @Groo, программа делала то, что я сказал ей делать.

Использование \ n создало новую строку ровно после вывода, поэтому для правильного запуска с самого начала требовался возврат каретки \ r.

Замена \ n или \ r на \ n \ r дает желаемый эффект.

...