第38节 用break和continue改变流程

一.break语句
1.break表示退出整个循环,嵌套循环中退出最近的一个循环语句;
2.break在循环中一般与if一起用;

#include <stdio.h>
int main()
{
    
    
	int sum = 0, i = 1;
	while (1)
	{
    
    
		sum += i;
		if (i==100)
		{
    
    
			break;
		}
		++i;
	}
	printf("%d\n", sum);
}
5050

二.continue语句
1.continue表示退出循环中的某次循环;
2.continue在循环中一般与if一起用;

#include <stdio.h>
int main()
{
    
    
	for (int i = 1; i <= 10; i++)
	{
    
    
		if (i%2==0)
		{
    
    
			continue;
		}
		printf("%d\n", i);
	}
}
运行结果:
1
3
5
7
9

三.趣例:吃饭.睡觉.打豆豆

#include <stdio.h>
int main()
{
    
    
	int cChioce;
	do
	{
    
    
		printf("*  1. 吃饭\n");
		printf("*  2. 睡觉\n");
		printf("*  3. 打豆豆\n");
		printf("*  0. 退出\n");
		printf("*  请选择(0-3) : ");
		scanf_s("%d", &cChioce);

		if (cChioce == 1)
			printf("我吃吃吃...\n");
		else if (cChioce == 2)
			printf("我睡觉觉...\n");
		else if (cChioce == 3)
			printf("我打打打...\n");
		else if (cChioce == 0)
			break;//退出do while循环
		else
		{
    
    
			printf("\007选择错误!\n");
			continue;//退出本次循环,不输出下一句
		}
		printf("恭喜你完成了一项工作!\n");
	} while (1);
}

四.程序“单入口,单出口”原则的破坏

1.循环中加入break,循环语句变成"单入口,多出口"

2.循环中加入continue,循环语句变成"多入口,单出口"

五.程序阅读

(1)

#include <stdio.h>
int main()
{
    
    
    int a, b;
    for (a = 1, b = 1; a <= 100; a++)
    {
    
    
        if (b >= 20) break;
        if (b % 3 == 1)//a=1;a=2;a=3; a=4; a=5; a=6; a=7; a=8;
        {
    
                  //b=4;b=7;b=10;b=13;b=16;b=19;b=22;退出;       
            
            b += 3;
            continue;
        }
        b -= 5;
    }
    printf("%d %d\n", a,b);
}
运行结果:
8 22

(2)

#include <stdio.h>
int main()
{
    
    
    int i, j;
    for (i = 0; i < 3; i++, i++)
    {
    
    
        for (j = 4; j >= 0; j--)
        {
    
    
            if ((j + i) % 2)
            {
    
    
                j--;
                printf("%d,", j);
                continue;
            }
            --i;
            j--;
            printf("%d,", j);
        }
    }
}
运行结果:
3,1,-1,3,1,-1,

(3)

#include <stdio.h>
int main()
{
    
    
    int a = 10, y = 0;
    do
    {
    
    
        a += 2;      //a值变化:12,14,16,14,16,14,16
        y += a;      //y值变化:12,12,28,28,44,44,60
        if (y > 50)
            break;
    }     while (a = 14);//每次循环完,a被赋值为14;
    printf("a=%d y=%d\n", a, y);
}
运行结果:
a=16 y=60

(4)

#include <stdio.h>
int main( )
{
    
    
    int i,j,k=19;
    while (i=k-1)//此处是赋值
    {
    
    
        k-=3 ;
        if (k%5==0)
        {
    
    
            i++ ;
            continue ;
        }
        else if (k<5)
            break ;
        i++;
    }
    printf("i=%d,k=%d\n",i,k);
    return 0;
}
运行结果:
i=6,k=4

六.实践项目

【项目1:大奖赛计分(续一)】

在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分。请在大奖赛计分程序基础上,增加功能,若用户输入不在0-10范围内,则立即要求重输,直到正确。

#include <stdio.h>
#define n 3
int main()
{
    
    
	int i;
	double ave, score, sum, max, min;
	char choice;
	do
	{
    
    
		i = 1;
		max = -1;
		min = 11;
		sum = 0;
		printf("请输入选手的成绩(0-10)\n");
		do
		{
    
    
			printf("第 %d 位评委给分:", i);
			scanf_s("%lf", &score);
			if (score < 0 || score>10)
				continue;  //输入不对不执行到后面的i++,提示的还是原评委
			sum += score;
			if (max < score)
				max = score;
			if (min > score)
				min = score;
			i++;
		} while (i <= n);
		ave = (sum - max - min) / (n - 2.0);
		printf("减去一个最高分: %.3f\n", max);
		printf("减去一个最低分: %.3f\n", min);
		printf("选手的最后得分:%.3f\n", ave);
		printf("************* 完成选手的打分 **************\n");
		printf("按N或n退出,其他键继续....\n");
		rewind(stdin);//清理缓冲区操作,VS2019使用fflush(stdin)清理无效!!!!!
		choice = getchar();
	} while (choice != 'n' && choice != 'N');
}

总结:

1.最新版的VS2019无法使用fflush(stdin)函数可用rewind(stdin)函数替换,效果相同。

2.这个也可以清理缓冲区: while ((choice = getchar()) != EOF && choice != ‘\n’) { ; }

3.choice改成int型,不用清空缓冲区也可以!!

【项目2:打豆豆】

设计一个程序,能重复地在显示下面的信息:

/* 1. 吃饭

/* 2. 睡觉

/* 3. 打豆豆

/* 0. 退出

/* 请选择(0-3):

根据用户输入的选项,输出一句提示性的话语(将来会对应实现某个功能)。输入0,则退出。

请在下面的程序段基础上完成

#include <stdio.h>
int main()
{
    
    
    char cChioce;
    do
    {
    
    
        printf("\n");
        printf("*  1. 吃饭\n");
        printf("*  2. 睡觉\n");
        printf("*  3. 打豆豆\n");
        printf("*  0. 退出\n");
        printf("*  请选择(0-3):");
        rewind(stdin);  //读字符前清除键盘缓存区
        scanf_s("%c", &cChioce,1);
        if (cChioce == '0')
        {
    
    
            printf("撤退!\n");
            break;      //此break跳出循环语句
        }
        else
        {
    
    
            switch (cChioce)
            {
    
    
            case '1':
                printf("我吃吃吃... ...\n");
                break;  //此break只跳出switch语句
            case '2':
                printf("我睡觉觉... ...\n");
                break;  //此break只跳出switch语句
            case '3':
                printf("我打打打... ...\n");
                break;  //此break只跳出switch语句
            default:
                printf("\007选择错误!\n");
                        //语句在最后,可以不写continue;
            }
        }
    }     while (1);    //死循环,要利用break跳出循环;
}

猜你喜欢

转载自blog.csdn.net/m0_51439429/article/details/115337455
今日推荐