(上节课剩余部分)分析下列代码:
int main()
{
int ret = 0;
int ch = 0;
char password[20] = { 0 };
printf("请输入密码>:");
scanf("%s", password);//输入密码,并存放在password数组中
//缓冲区还剩余一个'\n,前面输入的内容是密码内容+回车(即\n),密码内容被拿走了缓冲区还剩下\n
while ((ch = getchar()) != '\n')//读取一下'\n',起到清空缓冲区的作用
{
;//空语句
}
//注意,scanf它遇到空格,换行符或者制表符就会停止
printf("请确认(Y/N)>:");
ret = getchar();//要么接收Y,要么接收N
if (ret == 'Y')
printf("确认成功\n");
else
printf("放弃确认\n");
return 0;
}
代码2
int main()
{
int ch = 0;
while ((ch=getchar())!=EOF)
{
if (ch < '0' || ch>'9')
continue;
putchar(ch);
}
return 0;
}
//这段代码可以限定输入的内容为数字
for循环
我们已经知道了while循环,但是我们为什么还要一个for循环呢?首先来看看for循环的语法:
语法
for (表达式1; 表达式2; 表达式3)
循环语句;
表达式1为初始化部分,用于初始化循环变量。表达式2为条件判断部分,用于判断循环时候终止。表达式3为调整部分,用于循环条件的调整。
例:
int main()
{
int i = 0;
for (i = 1 ; i <= 10 ; i++)
{
//break;
continue;
printf("%d ", i);
}
return 0;
}
for语句的循环控制变量
一些建议:
- 不可在for循环体内修改循环变量,防止for循环失去控制;
- 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
例:
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)//前闭后开的写法,这样的写法让10具有了某种意义,如10次循环/打印/元素
{
printf("%d ", arr[i]);
}
return 0;
}
两边都是闭区间写法:
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i <= 9; i++)//两边都是闭区间写法
{
printf("%d ", arr[i]);
}
return 0;
}
一些for循环的变种
//变种1
int main()
{
for (;;)
//for循环的初始化、调整和判断都可以省略
//但是for循环的判断部分如果被省略,那判断条件就是:恒为真
//如果不是非常熟练,建议大家不要随便省略
{
printf("hehe\n");
}
return 0;
}
//变种2
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
一道笔试题:
//请问要循环多少次
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)//这里的判断k=0是赋值,0为假,故此代码循环0次
k++;
return 0;
}
do…while()循环
do语句的语法:
do
循环语句;
while (表达式);
do语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用
do while循环中的break和continue
例:
int main()
{
//打印1-10
int i = 1;
do
{
if (i == 5)
//break;
continue;
printf("%d ", i);
i++;
}
while (i <= 10);
return 0;
}