标题:循环程序运行一次后不能执行了,而且题目还有要求
只看楼主
孔翎
Rank: 2
等 级:论坛游民
帖 子:14
专家分:17
注 册:2020-3-25
结帖率:100%
已结贴  问题点数:10 回复次数:9 
循环程序运行一次后不能执行了,而且题目还有要求
附件是题目,求解答,为什么程序只能运行两次

#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();
                }
            }
}
搜索更多相关主题的帖子: printf int return include || 
2020-05-11 14:37
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
得分:6 
程序代码:
scanf_s("%c", &s,1); 
改成下面这个试试
while (scanf_s("%c", &s,1) && s == '\n');
2020-05-11 15:32
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
得分:4 
这个问题,你打个断点调试一下,就知道问题出在哪里了,
或者每次在 scanf_s("%c", &s,1);  后 输出一下 s的值,就知道出什么问题了
2020-05-11 15:56
孔翎
Rank: 2
等 级:论坛游民
帖 子:14
专家分:17
注 册:2020-3-25
得分:0 
回复 2楼 JabinZ
解决了,多谢
2020-05-11 20:25
孔翎
Rank: 2
等 级:论坛游民
帖 子:14
专家分:17
注 册:2020-3-25
得分:0 
回复 3楼 JabinZ
好的,问题已解决,多谢
2020-05-11 20:26
孔翎
Rank: 2
等 级:论坛游民
帖 子:14
专家分:17
注 册:2020-3-25
得分:0 
回复 2楼 JabinZ
可以劳烦讲一下为什么吗,多谢
2020-05-11 20:34
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
得分:0 
回复 6楼 孔翎
%c 是 录入字符, 换行也是字符啊, 当然也会被读取了
2020-05-12 11:44
孔翎
Rank: 2
等 级:论坛游民
帖 子:14
专家分:17
注 册:2020-3-25
得分:0 
回复 7楼 JabinZ
多谢,这里明白了,但这句里的while是做什么用的呀,判断吗,我试了一下删除后这个程序就运行不了了

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

2020-05-12 14:57
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
得分:0 
回复 8楼 孔翎
while  是循环啊, 我写的那个扩展开就是
while (scanf_s("%c", &s,1) && s == '\n') {
}

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

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

2020-05-12 17:53
孔翎
Rank: 2
等 级:论坛游民
帖 子:14
专家分:17
注 册:2020-3-25
得分:0 
回复 9楼 JabinZ
就是说只有符合括号里的情况是才可以继续编译,所以我才说是判断,这样理解对吗
2020-05-12 22:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501555-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.075403 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved