好的,这是我的代码。我应该制作一个程序,向一个玩家询问一个单词,并要求另一个单词找到它,一次猜一个字母。基本上,刽子手。我的问题是这些:
当我尝试将其增加1时,SCounter
变量会增加为随机数。我已经尝试过考虑它,但我不知道为什么。例如,当猜测单词是Kala
(希腊语为" Good / Fine")时,当我在第一个字母后输入任何字母时,SCounter等于错误的字母数量。
我的第二个问题是guess
。我的程序仅在我写char guess[2]
时才有效。当我写char guess[0]
时,它会永远循环。我不会感到不安,为什么。
int main(int argc, char *argv[]) {
SetConsoleOutputCP(1253);
int i = 0;
start :printf("Enter the guess word: ");
char word[25], sword[25];
char guess[2];
char alphabet[28] = {"abcdefghijklmnopqrstuvwxyz "};
int Counter = 6;
int SCounter = 0;
gets(word);
for (i=0; i<strlen(word); i++){
sword[i]='-';
}
while(Counter != 0)
{
printf("So far: ");
for(i = 0; i < strlen(alphabet); i++)
{
printf("%c", alphabet[i]);
}
printf("\n");
printf("Guess a character: ");
gets(guess);
printf("\n");
for(i = 0; i < strlen(word); i++)
{
if(word[i] == guess[0])
{
sword[i] = guess[0];
}
/*else
{
Counter--;
printf("You only have %d wrong guesses left.\n", Counter);
}*/
}
for(i = 0; i < strlen(sword); i++)
{
if (word[i]==sword[i]){
SCounter++;
}
printf("%c", sword[i]);
}
printf("\n");
printf("%d letters found so far.", SCounter);
printf("\n");
for(i = 0; i < strlen(alphabet); i++)
{
if (strlen(guess)<2)
{
if(alphabet[i] == guess[0])
{
alphabet[i] = '-';
}
}
}
if (SCounter == strlen(word)){
Counter = 0;
}
if (strcmp(word, sword)==0){
printf("Congratulation Player 1! You win!\n");
goto start;
}
}
return 0;
}
答案 0 :(得分:1)
看起来SCounter
变量在迭代之间没有重置为零,因此它会不断增长。
将SCounter
的声明/初始化移动到用于解决此问题的范围:
int SCounter = 0; // This is where the declaration should be
// Remove the declaration of SCounter at the outermost scope.
for(i = 0; i < strlen(sword); i++)
{
if (word[i]==sword[i]){
SCounter++;
}
printf("%c", sword[i]);
}
以下是关于其余程序的一些注释:
goto
不会为您的教练加分。对许多人来说,这是一面红旗;考虑在没有goto
的情况下重写。gets
功能本质上是不安全的。请不要将它用于新的开发。请改用fgets(guess, 2, stdin);
。