目录
1、循环种类
循环语句
- while
- for
- do...while
2、while结构
当条件满足的情况下,if语句后的语句执行,否则不执行。但是这个语句只会执行一次,但是我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次那我们怎么做呢?C语言中给我们引入了:while语句,可以实现循环。
while(表达式)
循环语句;
while括号里如果为真。那就一直执行,遇到假就退出循环。
3、while中的break
while中遇到break:永久终止循环,break后面的部分不再执行,while循环也结束。
结果打印1 2 3 4,break的作用是直接跳出循环。
#include<stdio.h>
int main()
{
int i = 1;
//在while循环中,break用于永久的终止循环
while(i <=10)
{
if(5 == i)
break;
printf("%d ",i);
i ++;
}
return 0;
}
4、while中的continue
while中遇到continue:结束本次循环,本次循环continue后的部分不再执行,开始下一次循环判断。
输出:1 2 3 4 加死循环,continue的作用是跳过本次循环的continue后面的代码,直接到while的条件语句。
#include<stdio.h>
int main()
{
int i = 1;
//在while循环中,continue的作用是跳过本次循环continue后面的代码
while(i <=10)
{
if(5 == i)
continue;
printf("%d ",i);
i ++;
}
return 0;
}
总结:break和continue
- break的作用是直接跳出整个循环。
- continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
5、EOF getchar putchar
- //getchar:读取一个字符
- //putchar:输出一个字符
如下举例:当输入一个字母的时候,就会输出一个字符
//EOF end of file 文件结束标志
int main()
{
int ch =getchar();
printf("%c\n",ch); //输出一个字符
return 0;
}
如下举例:一直的:当输入一个字母的时候,就会输出一个字符
int main()
{
int ch = 0;
while((ch = getchar()) !=EOF)
{
putchar(ch);
}
return 0;
}
scanf和getchar的区别
函数格式不同
- scanf函数是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。
- getchar函数是键盘输入函数,其功能是从键盘上输入一个字符。
读取方式不同
- scanf函数在读取数字时会跳过空格、制表符和换行符。
- getchar函数只能输字符型,输入时遇到回车键才从缓冲区依次提取字符。
结束输入的方式不同
- scanf函数以空格、Enter、Tab结束一次输入,不接受空格符。
- getchar函数以Enter结束输入(空格不结束),接受空格符。
舍弃回车符的方法不同
- scanf函数以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中)。
- getchar函数以Enter结束输入时,接受空格,会舍弃最后的回车符。
getchar读取的不是字符吗,为什么会用int去接收呢?仔细思考,getchar只能读取单个字符,那单个字符一定会有它的ASCII码值,那么就要用int类型的变量去接收。
如下举例:
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s",password);
printf("请确认密码(Y/N):>");
int ch = getchar();
if(ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
如上代码:当输入密码:123时候,直接输出:”请确认密码(Y/N):> 确认失败“没有给输入N/Y的机会,因为在在输入123再回车的时候,123输入到password了,然后回车输入到ch里了,然后ch不等于Y,所以确认失败。应该修改代码如下:
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s",password);
printf("请确认密码(Y/N):>");
//清理缓冲区,处理'\n'
getchar();
int ch = getchar();
if(ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
以上代码如果输入:“abc 123”时候又是上面的错误:直接输出:”请确认密码(Y/N):> 确认失败“没有给输入N/Y的机会,因为ssanf空格也可以结束,所有abc输入给了password,剩下的“ 123”又给了ch了,所以没有给输入Y/N的机会,应该修改代码如下:
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s",password);
printf("请确认密码(Y/N):>");
//清理缓冲区,处理'\n'
//getchar();
//清理缓冲区的多个字符
int tmp =0;
while((tmp = getchar()) != '\n')
{
;
}
int ch = getchar();
if(ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
如下练习:怎么样当输入数字时候打印,输入字母的时候不打印呢?
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
{
if(ch<'0' || ch>'9') //这里0-9就是ASSIC的值
continue;
putchar(ch);
}
return 0;
}