#include <curses.h>
int main(){
initscr();
for(int i = -128; i < 128; ++i)
addch(i);
getch();
endwin();
}

Pdcurses显示字符的空白-128到0 (128到255)。至少有什么方法可以让诸如é这样的重音字符正确显示吗?iostream没有问题:
int main(){
for(int i = -128; i < 128; ++i)
std::cout << char(i);
}

我编译了具有广泛字符和UTF支持的pdcurses,尽管这肯定不是这里的问题,对吗?(因为我想要的字符包含在0-255中,所以使用add_wch并不能解决这个问题)。
Windows 10 64位与g++ 6.1.0.
发布于 2016-11-23 19:30:02
我很傻。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在默认情况下可能会被签名,所以在调用char(i)之前,addch当然会被包装成负值。
https://stackoverflow.com/questions/40707557
复制相似问题