m0_59293469 2021-06-19 20:27 采纳率: 75%
浏览 187
已采纳

while语句循环为什么只能循环一次

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <stdbool.h>

bool play_game(void); // 模拟游戏,进行一次游戏,返回一个bool值,决出胜负

int roll_dice(void); // 记录两个骰子之和

int roll_dice(void) {

int x, y, z;// 定义变量 

x = rand() % 6 + 1;// 获取1到6之间的随机数 

y = rand() % 6 + 1;

z = x + y;//两点数之和 

printf("你的点数之后为 :%d\n", z);

return z;//返回Z 

}

bool play_game(void) {

int p, t;

p = roll_dice();

if(p == 7 || p == 11) {

return true;

}

else if(p == 2 || p == 3 || p == 12) {

return false;

}

else {

t = p;

printf("你的点数之后为 :%d\n", t);

for(; ; ) {

p = roll_dice();

if(p == t) {

return true;

}

else if(p == 7) {

return false;

}

}

}

}

int main(int argc, const char * argv[]) {

// insert code here...

printf("骰子游戏\n");

bool b;

char ch = 'y';

int i = 100, j = 0;

srand((unsigned) time(0)); // 放在循环外面,更新种子,使得每次产生不同的随机数

do {

printf("请下注:\n");

scanf("%d",&j);

b = play_game();

if(b) {

printf("你赢了!\n\n");

i=i+j;

}

else {

printf("你输了!\n\n");

i=i-j;

}

printf("是否输入Y或者y继续游戏? ");

ch = getchar();

getchar(); // 除去回车符

printf("\n");

}                                                                                                                                                                                                                                                                                                                                 

while(ch=='y') ; printf("您的钱数:%d",i);

return 0;

}

  • 写回答

4条回答 默认 最新

  • 关注

    你每次输入下注后 回车被ch读入了,所以报错,这样就行了 

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <stdbool.h>
    bool play_game(void); // 模拟游戏,进行一次游戏,返回一个bool值,决出胜负
    int roll_dice(void); // 记录两个骰子之和
    int roll_dice(void)
    {
        int x, y, z;// 定义变量
        x = rand() % 6 + 1;// 获取1到6之间的随机数
        y = rand() % 6 + 1;
        z = x + y;//两点数之和
        printf("你的点数之后为 :%d\n", z);
        return z;//返回Z
    }
    bool play_game(void)
    {
        int p, t;
        p = roll_dice();
        if(p == 7 || p == 11)
        {
            return true;
        }
        else if(p == 2 || p == 3 || p == 12)
        {
            return false;
        }
        else
        {
            t = p;
            printf("你的点数之后为 :%d\n", t);
            for(; ; )
            {
                p = roll_dice();
                if(p == t)
                {
                    return true;
                }
                else if(p == 7)
                {
                    return false;
                }
            }
        }
    }
    int main(int argc, const char * argv[])
    {
    // insert code here...
        printf("骰子游戏\n");
        bool b;
        char ch = 'y';
        int i = 100, j = 0;
        srand((unsigned) time(0)); // 放在循环外面,更新种子,使得每次产生不同的随机数
        do
        {
            printf("请下注:\n");
            scanf("%d",&j);
            b = play_game();
            if(b)
            {
                printf("你赢了!\n\n");
                i=i+j;
            }
            else
            {
                printf("你输了!\n\n");
                i=i-j;
            }
            printf("是否输入Y或者y继续游戏? ");
            getchar();
            scanf("%c",&ch);
    
            printf("\n");
        }
        while(ch=='y');
        printf("您的钱数:%d",i);
        return 0;
    }
    

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。