2017-04-25 62 views
1

我想創建一個hang子手遊戲。我使用''字符填充字符數組,而不是掃描用戶的字符,如果字符與任何帶有先前定義的字符的字符相匹配,則將''字符替換爲正確的字母。爲什麼這段代碼重寫每個循環中char數組的元素?

但我的代碼在每個循環中都將正確的字母改寫爲'_',我不知道爲什麼。

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

#define words_num 4 

int i ; 


char a[length] ; 

char guess; 

while(1) { 

printf("Guess a letter \n") ; 

scanf(" %c", &guess) ; 

hangman(guess, words[chosen] , a, length) ; 

} 


printf("\n") ; 
system("pause") ; 
} 

void hangman (char guessed, char words[], char a[] , int length){ 


for (i = 0; i < length ; i++) { 

a[i] = '_' ; 
} 

for (i=0; i< length ; i++) { 

if (guessed == words[i]) { 

    a[i] = guessed ; 
} 
} 

for(i=0; i< length; i++) { 
printf("%c ", a[i]) ; 
} 

} 
+1

看來部分來源缺失。 – BLUEPIXY

+1

這不會編譯。 –

+0

每次用'a [i] ='_'調用hangman()時,都會覆蓋[i]; ',你只需要在安裝過程中做一次,然後再索要猜測:-) – flob

回答

1

很顯然因爲代碼填寫a用下劃線是在hangman()開始,所以它會從main()每次調用運行。將該代碼移到main()的開頭,即while之前。

+0

顯然它不是很清楚的OP,所以它不是很清楚...... ;-) – flob

0

是的,代碼部分遺失,對不起,這裏是更正後的代碼。

謝謝!

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

#define words_num 4 

int i ; 


int main() { 

char *words[20] = { "apple" , "window", "cat" , "dog" }; 

srand(time(NULL)) ; 

int chosen = rand() % words_num ; /* A választott */ 

printf("%s\n", words[chosen]) ; 

int length = strlen(words[chosen]) ; 

printf("Length is: ") ; 
printf("%d\n", length) ; 



char a[length] ; 

char guess; 

for (i = 0; i < length ; i++) { 

a[i] = '_' ; 
} 

while(1) { 

printf("Guess a letter \n") ; 

scanf(" %c", &guess) ; 

hangman(guess, words[chosen] , a, length) ; 

} 


printf("\n") ; 
system("pause") ; 
} 

void hangman (char guessed, char words[], char a[] , int length){ 

for (i=0; i< length ; i++) { 

if (guessed == words[i]) { 

    a[i] = guessed ; 
} 
} 

for(i=0; i< length; i++) { 
printf("%c ", a[i]) ; 
} 

}