注册 登录
编程论坛 C语言论坛

循环程序运行一次后不能执行了,而且题目还有要求

孔翎 发布于 2020-05-11 14:37, 2119 次点击
附件是题目,求解答,为什么程序只能运行两次
只有本站会员才能查看附件,请 登录

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<stdbool.h>
int roll_dice(void);
bool play_game(void);
char s=0;
int m, n;
int main()
{
    srand((unsigned)time(NULL));
    play_game();
    printf("Play again?");
    while (1) {
        scanf_s("%c", &s,1);
        if (s == 'y' || s == 'Y')
        {
            play_game();
        }
        else
        {
            break;
        }
        printf("Play again?");
    }
    printf("Wins:%d Losses:%d", m, n);
    return 0;
}
int roll_dice(void)
{
    int a, b;
   
    a = rand() % 6 + 1;
    b = rand() % 6 + 1;
    printf("You rolled:%d\n", a + b);
    return a+b;
}
bool play_game()
{
    int i, j = 0;
    i = roll_dice();
            if (i == 7 || i == 11)
            {
                printf("You win!\n");
                m++;
                return true;

            }
            else if (i == 2 || i == 3 || i==12)
            {
                printf("You lose!\n");
                n++;
                return false;
            }
            else
            {
                j = i;
                printf("You point is %d\n", j);
                i = roll_dice();
            }
            while (1)
            {
                if (i == j)
                {
                    printf("You win!\n");
                    m++;
                    return true;
                }
                else if (i == 7)
                {
                    printf("You lose!\n");
                    n++;
                    return false;
                }
                else
                {
                    i = roll_dice();
                }
            }
}
9 回复
#2
JabinZ2020-05-11 15:32
程序代码:

scanf_s("%c", &s,1);
改成下面这个试试
while (scanf_s("%c", &s,1) && s == '\n');
#3
JabinZ2020-05-11 15:56
这个问题,你打个断点调试一下,就知道问题出在哪里了,
或者每次在 scanf_s("%c", &s,1);  后 输出一下 s的值,就知道出什么问题了
#4
孔翎2020-05-11 20:25
回复 2楼 JabinZ
解决了,多谢
#5
孔翎2020-05-11 20:26
回复 3楼 JabinZ
好的,问题已解决,多谢
#6
孔翎2020-05-11 20:34
回复 2楼 JabinZ
可以劳烦讲一下为什么吗,多谢
#7
JabinZ2020-05-12 11:44
回复 6楼 孔翎
%c 是 录入字符, 换行也是字符啊, 当然也会被读取了
#8
孔翎2020-05-12 14:57
回复 7楼 JabinZ
多谢,这里明白了,但这句里的while是做什么用的呀,判断吗,我试了一下删除后这个程序就运行不了了

[此贴子已经被作者于2020-5-12 15:00编辑过]

#9
JabinZ2020-05-12 17:53
回复 8楼 孔翎
while  是循环啊, 我写的那个扩展开就是

while (scanf_s("%c", &s,1) && s == '\n') {
}

大括号里面没有东西,所以就省略了,

[此贴子已经被作者于2020-5-12 17:55编辑过]

#10
孔翎2020-05-12 22:12
回复 9楼 JabinZ
就是说只有符合括号里的情况是才可以继续编译,所以我才说是判断,这样理解对吗
1