初步认识 C Lesson 5:输入函数缓冲区问题、for do whilie循环、go to语句

输入函数scanf 和 getchar()

  1. 计算机在从键盘、也就是标准输入流读取数据的时候,会有一个输入缓冲区,输入函数就从缓冲区里面拿数据。

2. 关于getchar()

在这里插入图片描述
返回的是读取到每个字符,字符在计算机中存储的是ASCII码值。

3. 确认密码的简单循环验证缓冲区

在这里插入图片描述

  1. scanf 把123456 拿走以后,还巧了个回车留在缓冲区里,getchar()获取一个字符的时候,就把回车键拿走了,所以确认失败
int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);123456   也可以用 gets
	
		printf("请确认密码(Y/N):>");
	清理缓冲区
		getchar(); 处理'\n'  getchar()获取一个字符
}

4. 关于gets

在这里插入图片描述

5. 如果密码中有一个空格呢?

在这里插入图片描述
可以利用getchar()循环输入,返回的是字符的码值,对码值进行判断,直到读取到\n为止。

清理缓冲区的中多个字符
int tmp = 0;   用tmp 接收返回值
while ((tmp = getchar()) != '\n')
{
	;
}
printf("请确认》Y\N?");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}

while循环小题

1.验证字符存的是ASCII 码值

int main()
{
	int ch = 0;
	while ((ch=getchar()) != EOF) ctrl+z是eof  
	{ 
		if (ch < '0' || ch>'9')		< 字符0 > 字符9 的意思 也就是小于或大于该对应的码值。
			continue;				如果输入的字符不是0--9,则继续输入,直到判断为该字符是 0--9之间。
		putchar(ch);			输出0--9 到屏幕上。
	}		
	return 0;		
}

< 字符 ‘0’ ,> 字符 ‘9’ 的意思

在这里插入图片描述

for循环。

1. 语法

for(表达式1;表达式2;表达式3)
循环语句;

表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断
循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
在这里插入图片描述

2. 使用for循环 在屏幕上打印1-10的数字。

#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
 for(i=1; i<=10; i++)
 {
 printf("%d ", i);
 }
 return 0;
}

3. for循环的一些变种

在这里插入图片描述
j = 3 出去就没在初始化为0.

4. break 和 continue

  1. 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的
    break是用于永久终止循环的。

  2. continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
    跳转到while语句的判断部分。进行下一次循环的入口判断
    在这里插入图片描述

5. for 循环变量的控制

  1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
    在这里插入图片描述

6. for 循环的变种

  1. 恒为真
    在这里插入图片描述
    1. 语法是支持的

在这里插入图片描述
2. 问:循环几次。
在这里插入图片描述
k=0;为假,就一次也不循环。

do while 循环语句

1. do 语句流程

  1. 在这里插入图片描述

3. 至少要循环一次,使用场景有限。

do 下面的语句执行完,在进行到判断部分要不要继续执行。

4. 例子

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0;
}

5. do 里面的break 和 continue 和其他循环一样的效果。

int main{
 int i = 5;
 do
 {
        if(5 == i)
            continue; 死循环 不打印
            //break; 一次也不打印
 printf("%d\n", i);
 }while(i<10);
 return 0;
}

goto 语句

1. 概念:

goto语句也称为无条件转移语句,其一般格式如:goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加半角冒号“:”。语句标号起标识语句的作用,与 goto 语句配合使用。

2. 一般格式

  1. got 语句标号;
    其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加半角冒号“:”。语句标号起标识语句的作用,与goto句配合使用。如:
label: i++;
loop: while(x<7);
goto loop;  跳到while 循环的部分
  1. C语言不限制程序中使用标号的次数,但各标号不得重名。goto 语句的语义是改变程序流向, 转去执行语句标号所标识的语句。
  2. goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
  3. 但是,在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
#include<stdio.h>
int n=0;
int main(void) {
    printf("input a string: ");
        loop: if (getchar()!='\n') {
        n++;
        goto loop;
    }
  printf("output: %d\n",n);
}

3. 一般作用

终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

for(...)
{
	for(...)
	{
		for(...)
		{
			for(...)
			{
				if(u==999)
				go to amazing;
			}
		}
	}
}
amazing:
	if(u==999)
	...

关机小程序

int main()
{
	char input[1024] ={0};
	system("shutdown -s -t 60");
bulaoshi:
	printf("请输入:我是弟弟,就取消关机!\n赶紧输吧:");
	scanf("%s",input);
	if(0==strcmp(input,"我是弟弟"))
	{
		system("shutdown -a");
	}
	else
	{
		goto bulaoshi;
	}
	return 0;
}

GG.

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值