• 7 C控制语句:分支和跳转


    6 循环辅助:continue和break

    一般而言,程序进入循环后,在下一次循环测试之前会执行完循环体中的所有语句。continue 和break语句可以根据循环体中的测试结果来忽略一部分循环内容, 甚至结束循环。

    6.1 continue语句

    3种循环都可以使用continue语句。执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代。如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。程序清单7.9演示了如何使用continue。

    程序7.9

    /* skippart.c -- uses continue to skip part of loop */
    #include 
    
    int main(void){
     	const float MIN = 0.0f;
     	const float MAX = 100.0f;
     	
     	float score;
     	float total = 0.0f;
     	int n = 0;
     	float min = MAX;
     	float max = MIN;
     	
     	printf("Enter the first score (q to quit): ");
     	while (scanf("%f", &score) == 1){
     		if (score < MIN || score > MAX){
     			printf("%0.1f is an invalid value. Try again: ", score);
     			continue; // jumps to while loop test condition
     		}
     		printf("Accepting %0.1f:\n", score);
     		min = (score < min)? score: min;
     		max = (score > max)? score: max;
     		total += score;
     		n++;
     		printf("Enter next score (q to quit): ");
     	}
     	if (n > 0){
     		printf("Average of %d scores is %0.1f.\n", n, total / n);
     		printf("Low = %0.1f, high = %0.1f\n", min, max);
     	}
     	else
     		printf("No valid scores were entered.\n");
     	return 0;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在程序清单7.9中,while循环读取输入,直至用户输入非数值数据。循环中的if语句筛选出无效的分数。假设输入188,程序会报告: 188 is an invalid value。 在本例中,continue语句让程序跳过处理有效输入部分的代码。程序开始下一轮循环,准备读取下一个输入值。

    continue可用作占位符。例如,下面的循环读取并丢弃输入的数据,直至读到行末尾:

    while (getchar() != '\n')
     	;
    
    • 1
    • 2

    当程序已经读取一行中的某些内容, 要跳至下一行开始处时, 这种用法很方便。问题是,一般很难注意到一个单独的分号。如果使用continue,可读性会更高:

    while (getchar() != '\n')
     	continue; 
    
    • 1
    • 2

    那么,从何处开始继续循环?对于while和do while循环,执行continue语句后的下一个行为是对循环的测试表达式求值。考虑下面的循环:

    count=0;
    while(count<10){
     	ch = getchar();
     	if (ch == '\n')
     		continue;
     	putchar(ch);
     	count++;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    该循环读取10个字符(除换行符外,因为当ch是换行符时,程序会跳过count++;语句)并重新显示它们,其中不包括换行符。执行continue后,下一个被求值的表达式是循环测试条件。

    对于for循环,执行continue后的下一个行为是对更新表达式求值,然后是对循环测试表达式求值。例如,考虑下面的循环:

    for (count = 0; count < 10; count++){
     	ch = getchar();
     	if (ch == '\n')
     		continue;
     	putchar(ch);
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    该例中,执行完continue后,首先递增count,然后将递增后的值和10作比较。因此,该循环与上面while循环的例子稍有不同。while循环的例子中,除了换行符,其余字符都显示;而本例中,换行符也计算在内,所以读取的10个字符中包含换行符。

    6.2 break语句

    待补充 220

  • 相关阅读:
    常用的35个Linux命令合集
    电源模块是什么?电源模块噪音过大的原因及解决办法!
    lua 光速入门
    润和软件受邀参展第十一届“中国软件杯”大学生软件设计大赛
    一文搞定垃圾回收器
    路由重分布的概念与配置
    goroutine摘要
    关于 自定义的RabbitMQ的RabbitMessageContainer注解-实现原理
    团队如何选择合适的Git分支策略?
    学习笔记——BSGS
  • 原文地址:https://blog.csdn.net/kking_edc/article/details/126024056