3
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语句打印出正确的文本,因此它被正确分配。先感谢您。

4

3 回答 3

8

您在声明中的if声明正在遮蔽它之外的声明;一旦 if 语句退出,那些阴影声明就会超出范围并永远消失。

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

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

或者你可以使用类似的功能strcpy来完成同样的事情。

顺便说一句,在这种情况下,在打开完整警告的情况下编译会向您显示错误,而无需在此处发布。

于 2010-04-05T22:39:31.460 回答
2

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

于 2010-04-05T22:39:24.750 回答
1

您正在块中创建另一组具有相同名称的局部变量(sprite1、sprite2 等),这会遮蔽if (stype == 1)外部级别的声明。改用这个:

if (stype == 1)
{
    sprintf(sprite1, "%s", " OO ");
    // etc
}
于 2010-04-05T22:39:47.607 回答