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条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?