C语言基础要素(017):退出条件循环:do-while
入口条件循环是在执行循环体语句之前先检测条件,循环语句有可能一次也不执行。而退出条件循环,它的判断条件则在执行循环体之后进行检查,这表示循环体中的语句至少被执行一次。
do-while循环
do-while循环属于退出条件循环,语法形式如下:
do
语句
while (表达式);
程序先执行循环体中的语句部分,然后再求值表达式,如果表达式的值为真,则再次执行语句,以此类推。当表达的式的值变为假,则循环终止。
#include <stdio.h>
int main()
{
do
{
printf("run once.\n");
}
while (0);
return 0;
}
选择哪种循环
在三种循环语句里,编程时应该选用哪一种呢?如果语句在执行之前,需要一个先决的判断,显然入口条件循环while与for都可以。对于需要执行一次再判断的情况,do-while是较好的选择,这会使代码更加简洁。下面的程序,需要在输入密码后才决定用户行为,正是属于这种情形。
#include <stdio.h>
int main()
{
int magic_num = 79;
int input_num;
do
{
printf("请输入你的魔法数字: ");
scanf("%d", &input_num);
}
while (input_num != magic_num);
printf("欢迎来到魔法学样!\n");
return 0;
}
程序先输出提示语句,等待你输入数字并按下回车键,当读取的数值与内部预设值不匹配时,就会重复这一过程,直至匹配。
使用scanf函数
函数scanf用于从标准输入设备(通常是键盘)读取数据到变量中。
int num1, num2;
scanf("%d%d", &num1, &num2);
第一个参数是格式化字符串,之后是各个变量的名称加前缀&
字符,否则变量将无法获得正确的输入。输入值之间通常以空白字符分隔,多个连续空白会被认为是一个分隔符。格式符%d
表示读取整型数据,这里读取2个整数,就需要键入 12 34
或 12 34
,而不是1234
。如果指定了除空白外的分隔符,则键入的文本要与格式化字符串相匹配,否则变量将无法获得正确的输入。
scanf("%d,%d", &num1, &num2);
此时就需要输入12,34
,数值间的空白不会影响正确性,所以12, 34
也是正确的输入;而12 34
会导致变量num2未能设置正确值。
scanf("%d # %d", &num1, &num2);
而,此时需要输入12 # 34
。
悄悄说一句,不要再在这个细节上面浪费时间了。
练习
- 使用do-while输出1-10。
- 使用scanf读取一个字符、再读取一个浮点数,并打印出来。
- 使用入口条件循环改写最后的示例。