Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从结构中使用ncurses扩展字符_C++_Struct_Character Encoding_Ncurses - Fatal编程技术网

C++ 从结构中使用ncurses扩展字符

C++ 从结构中使用ncurses扩展字符,c++,struct,character-encoding,ncurses,C++,Struct,Character Encoding,Ncurses,我试图显示从结构中提取的ncurses扩展字符 当我尝试使用: #include <ncurses.h> struct TEST_STRUCT { char nCharacter; // Where I want to store variable for printed character short nTestNumber; // Other stuff in struct }; TEST_STRUCT sTestData[] = {

我试图显示从结构中提取的ncurses扩展字符

当我尝试使用:

#include <ncurses.h>
struct TEST_STRUCT
{
    char    nCharacter;     // Where I want to store variable for printed character
    short   nTestNumber;    // Other stuff in struct
};
TEST_STRUCT sTestData[] = {
    { '.', 1 },         // Period
    { ',', 2 },         // Comma
    { ACS_VLINE, 1 }    // Vertical Line
};
int main(void)
{
    initscr();
    clear();
    for( int n = 0; n < 3; n++)
    {
        addch(sTestData[n].nCharacter); // print the characters in the struct
    }
        refresh();
    endwin();
    return 0;
}
#包括
结构测试
{
char nCharacter;//我要存储打印字符的变量的位置
短nTestNumber;//结构中的其他内容
};
测试结构sTestData[]={
{'.',1},//句点
{',2},//逗号
{ACS_VLINE,1}//垂直线
};
内部主(空)
{
initscr();
清除();
对于(int n=0;n<3;n++)
{
addch(sTestData[n].nCharacter);//打印结构中的字符
}
刷新();
endwin();
返回0;
}
ACS_VLINE字符没有正确显示,但经过一番尝试后,我发现以下效果:

#include <ncurses.h>
struct TEST_STRUCT
{
    int     nCharacter;         // Where I want to store variable for printed character
    short   nTestNumber;    // Other stuff in struct
};
TEST_STRUCT sTestData[] = {
    { '.', 1 },     // Period
    { ',', 2 },     // Comma
    { 4194424, 1 }  // Vertical Line
};
int main(void)
{
    initscr();
    clear();
    for( int n = 0; n < 3; n++)
    {
        addch(sTestData[n].nCharacter);     // print the characters in the struct
    }
    endwin();
    return 0;
}
#包括
结构测试
{
int nCharacter;//我要在其中存储打印字符的变量
短nTestNumber;//结构中的其他内容
};
测试结构sTestData[]={
{'.',1},//句点
{',2},//逗号
{4194424,1}//垂直线
};
内部主(空)
{
initscr();
清除();
对于(int n=0;n<3;n++)
{
addch(sTestData[n].nCharacter);//打印结构中的字符
}
endwin();
返回0;
}

将数值存储在int中似乎是错误的,但它是有效的。我应该如何做才能“正确地”执行此操作。

第一个示例的问题是符号
ACS\u VLINE
是数组中的一个条目,它不是静态初始化的(其实际内容取决于
initscr
)。奇怪的是,g++并没有对此发出警告,但gcc-Wall却发出了警告

定义如下:

#define NCURSES_ACS(c)  (acs_map[NCURSES_CAST(unsigned char,c)])

#define ACS_VLINE       NCURSES_ACS('x') /* vertical line */
第二种情况下的常数不同,等于
A_ALTCHARSET
x
组合:

#define NCURSES_ATTR_SHIFT       8
#define NCURSES_BITS(mask,shift) ((mask) << ((shift) + NCURSES_ATTR_SHIFT))

#define A_ALTCHARSET    NCURSES_BITS(1UL,14)
#定义课程属性第8班
#定义NCURSES\u位(掩码、移位)((掩码)