Как исправить отступы на выходе нежелательных проклятий

#c #linux #curses

#c #linux #проклятия

Вопрос:

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

Я пишу на 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 runningrn");
int ch = 0;

while(1)
{
    ch = getch();
    switch(ch)
    {
        case KEY_UP : 
            printf("upn");
            break;
        case KEY_DOWN :
            printf("downr");
            break;
        case KEY_LEFT :
            printf("leftr");
            break;
        case KEY_RIGHT:
            printf("rightr");
            break;
    }

}
return NULL;
}


void initcurses(); 
int main(int argc, char *argv[])
{
    //Initialise ncurses library functions
    initcurses();

    pthread_t t_input;
    pthread_create(amp;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. "r" против "n" ?

2. что вы имеете в виду @Someprogrammerdude

3. Кажется, работает так, как ожидалось, "upn" создаст новую строку без возврата каретки, "downr" выполнит возврат каретки в той же строке.

4. @Groo итак, вы не получаете таблицы в консоли?

5. @Groo тьфу, кажется, это было простое решение. Когда вы сказали, что он делает то, что должен, я попытался выполнить n r, и теперь он переходит на новую строку и правильно начинается с начала.

Ответ №1:

Как указал @Groo, программа выполняла то, что я ей сказал.

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

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

Комментарии:

1. не только Груо, как сказал раньше какой-то чувак-программист 😉

2. Я так полагаю ? Я не совсем понимал, что он имел в виду, пока Груо не заговорил об этом. Но да, вы правы