今日学习积累
一,使用getchar清理缓冲区中多个字符
1.介绍getchar
只能获取一个字符(回车也包括),且getchar的结果只有两个:1.错误 2.文件结束—EOF[end of file], EOF的值为-1。
读取字符,用整型变量来返回。
#include <stdio.h>
int main(`
{
int ch = 0;在这里插入代码片
while ((ch = getchar() )!= EOF)
putchar(ch);
return 0;
}
2.getchar清理缓冲区留下来的字符
getchar清理缓冲区的原理图如下:
利用scanf函数把键盘里的字符先存在缓冲区里
getchar读取缓冲区里的’\n’—清理缓冲区
二. for循环
for(表达式1;表达式2;表达式3)
表达式1:初始化
表达式2:判断部分
表达式3:调整部分
1.一些关于for循环的变种
(1)“表达式1”可省略,即不设置初值,但表达式1后的分号不能省略,且在for循环之前给’i’初始化
for (; i <= 100; i++)sum += i;
(2)“表达式2”可省略——恒为真(非0)
for (i = 1;; i++)sum += 1;
(3)“表达式3”可省,但后面要自己设计
for (i++; i <= 100;)
{
sum += i;
i++;//另外设法添加,保证程序正常运行
}
(4)“表达式123”都可省略
注意:省略带来的弊端
初始化同时被省略带来的弊端
结果如下:
理由:"j"的值在第二次循环里并没有变回0
2.建议
(1)不可在for循环体内修改变量,防止for循环失去控制。
(2)建议for语句在循环控制变量的取值采用“前闭后开区间”
eg:
i=0;i<10
三.打印素数
1.从定义出发(素数—只能被1和它本身整除)
flag起到标记的作用
2.优化素数函数
只判断奇数—从i的角度
缩小j的范围,进而使得程序优化
原理:16=44=28;
c=a*b;
a和b中至少存在一个开平方<=c