2011-08-23 82 views
0

以下問題:讓字符串增長輸入

我想做一種hang子手遊戲(控制檯中的所有東西)。 所以我做了一個循環,在遊戲結束後會變成13次,玩家鬆動(如果玩家插入錯誤的字母,它只會倒數)。 現在,我想向用戶顯示他已使用哪些字母。所以輸出應該是這樣的:「你已經使用過:a,b,c,g ...」等等。所以在每次嘗試之後,該行都會增長一個字母(當然是輸入字母)。 我試過strcpy,但它只會產生隨機字母,我從來沒有放過,它不會增長,所以我該如何處理?

#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <windows.h> 
#include <ctype.h> 

void gotoxy(int x, int y) 
{ 
COORD coord; 
coord.X = x; 
coord.Y = y; 
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 
} 

int main() 

{ 
char word[81], used[14]; 
int wrong=0, laenge, _, i; 
char input; 


SetConsoleTitle(" Guess me if u Can! "); 



//printf("\n\n spielst du mit einem Freund oder alleine?"); /*for later 
//printf(" \n\n [1] alleine" 
//  " \n\n [2] mit einem Freund");         */ 


printf("\n\n please insert a word (max. 80 characters): \n\n"); 

gets(word); 

    laenge=strlen(word); 

    printf("\n\n this word has %i characters.\n\n",laenge); 

    for(i=0; i<13; i++) 
    { 
//     for(_=0; _<laenge; _++) /*ignore this this is also for later 
//     printf(" _"); 
//     printf("\n");           */ 

    gotoxy(10,10); 
    printf("\n\n please insert a letter now: "); 
    input=getch(); 
    strcpy(used, &input); 
    printf("\n\n The following characters are allready used: %c ", used); 

    if(strchr(word, input)){ 
         printf("\n\n %c is in the word\t\t\t\t\t\t\n\n"); 
         i--; 

    } 
        else{ 
         printf("\n\n the letter %c is wrong!\n"); 
         wrong++; 
         printf(" you have %i try",13-wrong); 
    } 

    } 
    system("cls"); 
    printf("\n\n to many tries.\n\n"); 





system("Pause"); 


} 
+2

邊注:從來沒有使用的變量名與'_'開始(他們可能會使用系統變量衝突)。更少一個'_'。 –

+0

這就是爲什麼我總是使用帶有字符串的語言。 –

回答

1

正如已經在這裏說,你應該用零填充使用,像used[14] = {0};

然後,我覺得行printf("\n\n The following characters are allready used: %c ", used);應該printf("\n\n The following characters are allready used: %s ", used);,請注意「%s的」你打印的字符串。

+0

謝謝你這是'%s'發生這種情況,如果你在代碼上尋找幾個小時,並試圖找到我眼中有blinkers的錯誤 – globus243

2

首先,你應該填補used有0個字符,以確保它始終是正確的終止:

memset(used, 0, 14); 

然後,添加一個新的角色,以這樣的:

used[i] = input; 

另外,如@Fred所述,您應該在printf調用中使用適當的格式說明符%s

0

如果知道最大大小,則可以創建一個具有該最大大小的緩衝區,然後將其附加到該緩衝區。在這種情況下,您確實知道最大尺寸,因爲字母表中只有26個字母。因此,字符串的最大長度是您在開頭放置的任何文本的長度,加上您將用於每個字母的字符數的26倍。我在初始字符串中計數了18。請記住在結尾處爲空字節終止符添加一個。對於每個字母,你都有字母,逗號和空格,所以如果我進行了算術計算,則最大長度爲18 + 26 * 3 + 1 = 97。

所以,你可以寫這樣的:

char used[96]; 
strcpy(used,"You already used: "); 
int first=TRUE; 
... whatever other work ... 
... let's say we get the character in variable "c" ... 
// Add comma after previous entry, but only if not first 
if (!first) 
{ 
    first=FALSE; 
    strcat(used,", "); 
} 
// turn character into a string 
char usedchar[2]; 
usedchar[0]=c; 
usedchar[1]='\0'; 
// Append to working string 
strcat(used,usedchar); 
+0

從技術上來說,因爲它只會在玩家輸掉之前增加13個字符,他真的只需要做18 + 13 * 3 + 1 = 58 – Daniel

+0

好點,我在「13轉」中掠過。 – Jay