2016-11-20 57 views
0
#include <curses.h> 

int main(){ 

    initscr(); 

    for(int i = -128; i < 128; ++i) 
     addch(i); 

    getch(); 
    endwin(); 

} 

enter image description here顯示與pdcurses

Pdcurses重音字符正在顯示爲空白字符-128到0(128到255)。有沒有什麼辦法可以讓重音字符如é正確顯示? iostream沒有麻煩:

int main(){ 

    for(int i = -128; i < 128; ++i) 
    std::cout << char(i); 

} 

enter image description here

我編譯pdcurses與寬字符和UTF支持,雖然這裏肯定不會的問題,無論如何,對不對? (因爲我想要的字符包含在0-255之間,並且使用add_wch反而不能解決問題)。

Windows 10 64位g ++ 6.1.0。

回答

0

我很無聊。 addch取值爲chtype。除了表示字符以外,文檔不太清楚chtype的實際類型。看看curses.h我可以看到chtype是unsigned long。所以負i值被轉換爲unsigned,因此環繞,導致詛咒不得不打印字符,他們沒有分配的ASCII表示。我也迷路,因爲使用沒有負值這個看似類似的代碼產生相同的結果:

int main(){ 

    initscr(); 

    for(int i = 0; i < 255; ++i) 
     addch(char(i)); 

    getch(); 
    endwin(); 

} 

直到我想起字符在默認情況下可能會被簽字,所以當然char(i)環繞addch是之前成爲負調用。