2017-04-06 42 views
1

我正在研究一个猜谜游戏。环路因条件而终止,但条件是必要的?

问题是我必须将remainingguesses设置为0,这样一个人可以使得猜测的数量减少1个。但是同时循环中设置的条件是基于remainingguesses不是0。它是0循环终止并继续。

我不知道如何解决这个问题,同时使循环中的条件正常工作。

这里是有问题的循环:

printf("Type the number of guesses that player 2 gets and press return: \n"); 
    scanf("%d",&guesses); 

    remainingguesses = 0; 

    while (remainingguesses != 0) { 
    printf("Player 2: Type your guess and press return (guesses remaining:%d):\n",remainingguesses); 
    scanf(" %d",&secretnumberguess); 
    remainingguesses = guesses - 1; 

    if (secretnumberguess > secretnumber) { 
     printf("Your guess was greater than the secret number.\n"); 
    } 

    else if (secretnumberguess < secretnumber){ 
     printf("Your guess was less than the secret number.\n"); 
    } 

    else{ 
      printf("Your guess was equal to the secret number. You win!\n"); 
    } 
    } 

    if (remainingguesses == 0) 
    printf("Sorry you are out of guesses. You lose.\n"); 

如果需要,这里是有问题的全码:

#include <stdio.h> 

int main() 
{ 

    int secretnumber; 
    int guesses; 
    int secretnumberguess; 
    int remainingguesses; 

    while (1) { 
    printf("Player 1: Type a number between 0 and 99 and press return:\n"); 
    scanf(" %d",&secretnumber); 

    if (secretnumber > 99 || secretnumber < 0) { 
     printf("Secret number cannot be greater than 99 or below 0.\n"); 
     continue; 
    } 
    break; 
    } 

    printf("Type the number of guesses that player 2 gets and press return: \n"); 
    scanf("%d",&guesses); 

    remainingguesses = 0; 

    while (remainingguesses != 0) { 
    printf("Player 2: Type your guess and press return (guesses remaining:%d):\n",remainingguesses); 
    scanf(" %d",&secretnumberguess); 
    remainingguesses = guesses - 1; 

    if (secretnumberguess > secretnumber) { 
     printf("Your guess was greater than the secret number.\n"); 
    } 

    else if (secretnumberguess < secretnumber){ 
     printf("Your guess was less than the secret number.\n"); 
    } 

    else{ 
      printf("Your guess was equal to the secret number. You win!\n"); 
    } 
    } 

    if (remainingguesses == 0) 
    printf("Sorry you are out of guesses. You lose.\n"); 

    return 0; 
+0

你'remainingguesses =猜测 - 1;'但是你没有在循环改变'guesses',所以剩下的没有变化猜测的数目。你可能需要'剩下的猜测 - 或'或者同等的东西。事实上,我可能会做不同的事情。我可能会计算所采用的猜测次数:'int num_guesses; for(num_guesses = 0; num_guesses

+0

这与['while while循环无法开始 - 忽略if语句和条件作为结果]密切相关(https://stackoverflow.com/questions/43244415/while-loop-failing-to-begin-ignoring-if -statements和 - 条件 - 作为一种结果);同一作者,同一个基本程序。 –

+0

对不起,但你的意思是剩余的猜测 - ;你的意思是用一些变量或从字面上减去它。 –

回答

1

简化代码:

#include <stdio.h> 

int main() 
{ 

    int secretnumber; 
    int guesses; 
    int secretnumberguess; 
    int flag=0; 

    while (1) { 
    printf("Player 1: Type a number between 0 and 99 and press return:\n"); 
    scanf(" %d",&secretnumber); 

    if (secretnumber > 99 || secretnumber < 0) { 
     printf("Secret number cannot be greater than 99 or below 0.\n"); 
     continue; 
    } 
    break; 
    } 

    printf("Type the number of guesses that player 2 gets and press return: \n"); 
    scanf("%d",&guesses); 


    while (guesses > 0 && flag==0) { 
    printf("Player 2: Type your guess and press return (guesses remaining:%d):\n",guesses); 
    scanf(" %d",&secretnumberguess); 
    guesses=guesses - 1; 

    if (secretnumberguess > secretnumber) { 
     printf("Your guess was greater than the secret number.\n"); 
    } 

    else if (secretnumberguess < secretnumber){ 
     printf("Your guess was less than the secret number.\n"); 
    } 

    else{ 
      printf("Your guess was equal to the secret number. You win!\n"); 
      flag=1; 
    } 
    } 

    if (guesses == 0 && flag==0) 
    printf("Sorry you are out of guesses. You lose.\n"); 

    return 0; 
} 
+0

我得到了一个巨大的错误只是编译此,#包括 hw05.c:1:错误:预期标识符或“(”前数字常数 在文件从/usr/include/stdio.h:75包括, from hw05.c:15: /usr/include/libio.h:332:错误:在'size_t'之前出现预期说明符 - 限定符列表' –

+0

错误是什么? – jophab

+0

就是这样了 –

1

这里可能是这个编码的简单方式。

read guesses; 

while (guesses > 0) { 
    read input; 
    if (input == secret) { 
    print "you win!!"; 
    return; 
    } 
    else { 
    print "try again!"; 
    } 
    guesses--; 
} 

print "Sorry! You are out of guesses";