2010-04-05 129 views
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-block內的printw語句打印出正確的文本,因此它被正確地分配。先謝謝你。

+0

好的,我已經意識到我是這種情況下的白癡> _ <。不需要更多的答案。 – Galileo 2010-04-05 22:45:00

+0

不需要自我鞭necessary。 8v)儘管如此,請繼續並接受你最喜歡的答案。 – 2010-04-05 22:53:33

回答

8

您在if聲明中的聲明會隱藏聲明之外的聲明;一旦if語句退出,那些被隱藏的聲明就會超出範圍並且永遠消失。

要解決這個問題,你可以不喜歡

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

或者你可以使用這樣的函數strcpy來完成同樣的事情。

這是一種情況,開啓完整警告的情況下編譯會顯示錯誤,無需在此發佈,順便說一下。

2

你正在聲明它們作爲'if'塊中的局部變量。它們不影響函數範圍中的字符串。

1

您正在if (stype == 1)的本地塊中創建另一組具有相同名稱(sprite1,sprite2等)的局部變量,該變量會影響外層的聲明。用這個代替:

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

爲什麼使用'sprintf()'其中'strcpy()'足夠? – 2010-04-05 22:44:41