飞道的博客

【C语言基础学习笔记】二、分支与循环语句(2)

378人阅读  评论(0)

个人介绍:初学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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场