为什么if语句不打印“做得好”,为什么循环重复出questions()

时间:2019-08-17 22:44:10

标签: c loops if-statement random

我想制作一个游戏,在该游戏中,您可以转三圈来从计算机猜测所选的数字。但是,即使您正确地设置了数字(已经使用printf语句进行了测试),它也永远不会说做得好,并且循环还会因继续或运行两次而混乱。

我尝试删除中断。 我已经输入了printf语句来检查随机性和问题是否确实存储了正确的值,并且确实如此。

# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# include <time.h>

int questions() {

    int num;

    printf("Chose a number between one - ten: ");
    scanf("%d",&num);

    return num;

}

int randomise() {

    int roll;

    srand(time(NULL));

    roll = rand()%10 + 1;
    return roll;

}

int main() {

    int chosenNum, enteredNum, i;

    chosenNum = randomise();
    enteredNum = questions();

    for(i = 0; i < 10; i++) {
        if(chosenNum != enteredNum) {

            questions();
            break;

        }
        else if(chosenNum == enteredNum) {

            printf("WELL DONE !!!");

        }
    }

    return 0;
}

零错误和零警告。结果应该是您对做得很好感到满意。

3 个答案:

答案 0 :(得分:1)

有两个问题:

  1. 您正在使用break,如果第一个数字不匹配,则不允许再次尝试输入数字,并且
  2. 循环中questions()的返回值未分配给enteredNum(这意味着它将第二次尝试使用旧数字)。

答案 1 :(得分:0)

enteredNum从未在循环内设置。因此,除非第一次为假,否则如果为假就不可能。

改为将您的循环固定为以下内容:

for(i = 0; i < 10; i++){
 if(chosenNum != enteredNum){

    enteredNum = questions();
    break;

   }
   else if(chosenNum == enteredNum){

      printf("WELL DONE !!!");

   }
}

答案 2 :(得分:0)

这是代码的最新更新,感谢所有帮助人员。反馈很棒!继承人代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int questions(){

int num;

printf("Chose a number between one - ten: ");
scanf("%d",&num);

return num;

}

int randomise() {

int roll;

srand(time(NULL));

roll = rand()%10 + 1;

return roll;

}

int main(){

int chosenNum, enteredNum, i;

int life = 3;

chosenNum = randomise();
enteredNum = questions();

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

enteredNum = questions();

 if((enteredNum != chosenNum) && life > 0){

    life -= 1;

    if(life == 1 ){

    printf("GAME OVER !!!\n");
    break;

      }

    }
    else if((chosenNum == enteredNum) && life > 0){

    printf("WELL DONE !!!\n");
    break;

   }

}

return 0;

}