个人介绍:初学C语言的小白,热爱编程的菜鸟。
奋斗的意义,不在于,一定会让你取得多大的成就,只是让你在平凡的日子里,活得比原来的那个自己,更好一点。让你与生活少一点妥协,让你有更多的力气保护你所喜欢的东西,让你对一切美好的事物力所能及,更重要的是让你在最美的韶光里,为了成为最好的你,没有辜负努力奋斗的自己。
getchar()函数详解
接收字符 返回ASCII值,返回类型是整型(int / char),所以在定义变量接收getchar()返回的字符时,需要用整型来定义。(字符型 char在数据存储的时候存的是ASCII值,属于整数)
putchar()函数:输入打印字符
头文件 stdio.h
EOF(end of file 文件结束标志 - 1) :键盘输入 Ctrl + Z
putchar()函数:输出一个字符
eg:输入一个字符,接收之后,打印出来。
getchar实际读取方式并不是直接从键盘输入获取,而是通过缓冲区。键盘输入的字符先存放到缓冲区,getchar从缓冲区中读取字符。(任何键盘输入的内容都可以算作字符,包括空格、换行等)
像这样的代码,有什么实际的意义或应用呢?
我们来看一下这个case:
#include<stdio.h>
int main()
{
char password[20] = {
0 };
int ch = 0;
printf("请输入密码:>>\n");
scanf("%s", password);
printf("请确认密码(Y/N):>>\n");
ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
运行程序:输入12345 后 直接结束程序显示以下结果(并没有停顿让我们输入Y / N来进行确认。)
分析: 我们输入12345 + enter后实际的输入是 12345\n,但是scanf函数只会将12345拿走,余下\n在缓冲区。这个时候使用getchar函数,因为缓冲区不为空,有字符\n,因此不会停下来等我们输入,而是直接将\n读取了。因为’\n’ != ‘Y’ ,所以输出 “确认失败”。
现在我们发现这个地方有问题,那么这个问题如何去解决呢?
思路一:我们知道这个地方缓冲区放了\n,导致不暂停,我们可以用 getchar(); 清理缓冲区。
这种方式虽然可以解决 类似于输入 12345 + enter(\n)这样的问题,但是如果中间出现空格比如 12345 abcde
就又会出错,因为scanf读取字符串的时候遇到空格会停止。
思路二:为了解决思路一中存在的缺陷(只用一个getchar读取字符,但是无法保证读取的字符一定是\n),这里我们用循环的方式将scanf读取字符后剩余在缓冲区中的其它字符全部读取出来。
#include<stdio.h>
int main()
{
char password[20] = {
0 };
int ch = 0;
printf("请输入密码:>>\n");
scanf("%s", password);
printf("请确认密码(Y/N):>>\n");
int tmp;
while ((tmp = getchar()) != '\n')
{
;
}
ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
getchar的返回类型是int :int getchar(void)
再看看下面这个case
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch>'9')
continue;
putchar(ch);
}
return 0;
}
输出打印字符0 - 9之间的字符。
for的语法结构表达
for语句
语法结构:
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1:初始化部分
表达式2:条件判断部分
表达式3:调整部分
1.不可在for循环体内修改循环变量,防止for循环失控
2.建议采用前闭后开区间 写法
for变种1
结果:死循环输出 “haha”
1.for循环的初始化、调整、判断都可以省略,但是for循环的判断部分如果被省略,那判断条件恒为真,进入死循环
2.如果不是非常熟练,建议大家不要随便省略
for变种2
这个case中有两个变量,两个判断条件,两个调整。
也就是说初始化、判断、调整这三部分可以是一条语句也可以是多条语句。
循环0次 分析:条件判断部分 为k = 0 其结果为k的值 k为0,条件判断结果为假,直接跳出循环
break在for语句中的作用
break在for循环中跳出循环,直接终止循环。
continue在for语句中的作用
continue在for循环中跳过本次循环后面的语句,直接执行调整部分
do while 的语法结构表达
do...while()循环---语法结构
do
循环语句;
while(表达式);
#include<stdio.h>
int main()
{
int i = 0;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
continue在do while语句中的作用:
结果:0 1 2 3 4 死循环(光标还在闪动)
continue:跳过本次循环continue后面的语句,直接进入下一次循环
break在do while语句中的作用:
结果:0 1 2 3 4
break:跳出break所在的循环体,终止循环。
转载:https://blog.csdn.net/QIYICat/article/details/115762197