如果声明无效

时间:2010-04-05 22:35:42

标签: c++ string if-statement ncurses

void spriteput(int x,int y, int stype)
{
    char sprite1[5]="OOOO";
    char sprite2[5]="OOOO";
    char sprite3[5]="OOOO";
    char sprite4[5]="OOOO";
    if (stype == 1)
    {
        char sprite1[5] = " OO ";
        char sprite2[5] = "OOOO";
        char sprite3[5] = "OOOO";
        char sprite4[5] = " OO ";
        mvprintw(2,y,"%s \n",sprite1);
    }
    mvprintw(x+1,y,"%s \n",sprite2);
    mvprintw(x+2,y,"%s \n",sprite3);
    mvprintw(x+3,y,"%s \n",sprite4);
}

如果我是正确的,那么代码块应该在NCURSES屏幕上打印出来

 OO  
OOOO
OOOO
 OO
但是,它会打印出默认文本(第一个char语句)。谁能告诉我为什么会这样? If块中的printw语句打印出正确的文本,因此它被正确分配。提前谢谢。

3 个答案:

答案 0 :(得分:8)

if声明中的声明会影响声明之外的声明;一旦if语句退出,那些带阴影的声明就超出范围并永远消失。

要解决此问题,您可以执行类似

的操作
if (stype == 1)
{
    sprite1[0] = ' ';
    sprite1[3] = ' ';
    // ...

或者您可以使用像strcpy这样的函数来完成同样的事情。

顺便说一下,如果打开完整警告进行编译就会向您显示错误,而不需要在此处发布。

答案 1 :(得分:2)

您在'if'块中将它们声明为局部变量。它们不影响函数范围内的字符串。

答案 2 :(得分:1)

您正在if (stype == 1)的本地块中创建另一组具有相同名称(sprite1,sprite2等)的局部变量,这些变量会影响外层的声明。请改用:

if (stype == 1)
{
    sprintf(sprite1, "%s", " OO ");
    // etc
}