2013-07-11 68 views
0

我使用Linux和ncurses爲我的應用程序,我使用getch作爲非阻塞使用nodelay。問題在於,當用輸入的getch循環時,它總是錯過第一個字符。例如,輸入「Helloworld」將打印爲「elloworld」。 我目前似乎沒有看到任何問題,雖然也許它是因爲我一直在盯着遠遠長的代碼,或者我錯過了一些東西。Ncurses,非阻塞getch錯過了第一個字符

while(TRUE) 
{ 
    gchar chr; 
    gchar *cmd = g_malloc(50); 

    if((getch()) == ERR) 
    { 
     // no user input 
    } 
    else 
    { 
     gint i = 0; 

     while((chr = getch()) != '\n') 
     { 
      cmd[i] = chr; 
      waddch(ncurse->window, chr); 
      wrefresh(ncurse->window); 
      i++; 
     } 

     waddstr(ncurse->log, cmd); 
     wrefresh(ncurse->log); 

     wmove(ncurse->window, ncurse->window->_maxy, 2); 
     wclrtoeol(ncurse->window); 

     wrefresh(ncurse->window); 
    } 

    g_free(cmd); 
} 

回答

2

你期望什麼?

if((getch()) == ERR) 
    { 
    // no user input 
    } 

丟棄第一個字符,如果有的話。

+0

感謝您爲我們帶來了一雙清新的眼睛,並推向正確的方向,現在它已經固定下來了。 – Bennu