ads3579 2021-04-26 01:11 采纳率: 69.2%
浏览 61
已采纳

<C语言> 输入y除外的字母为什么程序还是继续进行了?大佬们帮帮忙

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)

{
    char start;
    int num, gold, times, balance;
    start = 'y';
    printf("Do u want wealth overnight?\n");
    printf("Let´s play a game\n");
    printf("How much money do you want to pay for the game?\n");
    scanf("%d",&gold);
    times = gold/2;

while (start == 'y' || start == 'Y')

 {

            while (gold >= 2)
        {
            printf("You have %d chances.\n",times);
            srand( (unsigned)time( NULL ) );
            num = rand()% 15+3;
            printf("Your number is : %d\n",num);
            fflush(stdin);

            if (num == 18 || num == 3)
            {
                gold = gold + 8;
                times = gold/2;
                printf("Congratulations! You win 10 euro!\n");
                printf("Your balance is %d. \n",gold);
            }

            else if (num >= 16 || num == 5)
            {
                gold = gold + 1;
                times = gold/2;
                printf("Congratulations! You win 3 euro!\n");
                printf("Your balance is %d. \n",gold);
            }

            else
            {
                gold = gold - 2;
                times = gold/2;
                printf("You lose, try again!\n");
                printf("Your balance is %d. \n",gold);
            }

            printf("Do you want to try again?(y/n)\n");
            scanf("%c", &start);
            fflush(stdin);

        }
        printf("Your balance is not enough, Welcome to come again.");
 }

return 0;
}
 

  • 写回答

2条回答 默认 最新

  • Norcor 2021-04-26 02:05
    关注

    这个问题的出现是你想当然了。

    按你的想法,大概是:循环结束的标记start是y,如果start不是y,那就应该立刻跳出循环

    但你没有注意到你套了两层循环啊。

    程序执行是按行依次执行,在执行到

                printf("Do you want to try again?(y/n)\n");
                scanf("%c", &start);

    代码后,程序首先是处理

         fflush(stdin);

            }
            printf("Your balance is not enough, Welcome to come again.");

    代码段中的‘}’,它回到了

    while (gold >= 2)
            {
                printf("You have %d chances.\n",times);
                srand( (unsigned)time( NULL ) );

    这个‘{’对应的小循环,此时就继续执行程序了,因为小循环的条件:gold>=2还是成立的。

    只有在gold<2,执行了        printf("Your balance is not enough, Welcome to come again."); 语句后,才会执行大循环的条件判定,跳出大循环

    当然,核心问题不是两层循环,你需要注意的是循环终止的判定是在当前轮的循环结束时发生的,在那之前的语句属于当前轮,依旧是有效的!

    码字不易,望采纳,谢谢!

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

报告相同问题?

悬赏问题

  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下