我正在处理一个刽子手项目,正如你在我的代码中看到的那样,它在某些情况下会为我的字符串添加一些奇怪的字符。并非总是,但大部分时间。 (例如:MOUSE => MOUSE @ 由于我不能进行字符串比较,而且它也很难看。任何解决方案?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
char animals [8][20] = {"LION" ,"GIRAFFE","OCTOPUS", "RHINOCEROS","CENTIPEDE", "ELEPHANT", "MOUSE", "DOG"};
int i ;
int main() {
srand(time(0));
int choose;
choose = rand()% 7;
int length;
printf("%s", animals[choose]);
length = strlen(animals[choose]);
char result[length];
for(i=0; i< length;i++) {
result[i] = '_' ;
}
printf("%s", result);
while(1) {
printf("\nEnter guess char!: ") ;
char guess ;
scanf(" %c", &guess) ;
guess = toupper(guess) ;
hangman(guess, result, animals[choose], length ) ;
}
return 0;
}
void hangman (char guess, char result[], char word[], int length ){
for(i=0; i< length; i++) {
if(guess == word[i]) {
result[i] = guess ;
}
}
printf("%s", result) ;
if(strcmp(result, word)== 0 ){
printf("gratulation!") ;
}
}
答案 0 :(得分:0)
strlen(animals [choose])在字符串中不包含'\ 0'NUL终止字符,因此在创建结果时需要添加一个到长度。你还需要null结束这样的结果;
char result[length+1];
result[length] = '\0';
答案 1 :(得分:0)
对于初学者,我认为你的意思是
choose = rand() % 8;
^^^
因为数组动物被声明为
char animals [8][20] = /*...*/;
^^^
此调用中使用的格式说明符"%s"
printf("%s", result) ;
旨在输出终止为零的字符串。但是,字符数组result
不包含字符串。
你可以写
char result[length + 1] ;
for(i=0; i < length;i++) {
result[i] = '_' ;
}
result[i] = '\0';