C语言初阶(9) | while | break | continue | getchar

目录

1、循环种类

2、while结构

3、while中的break

4、while中的continue

5、EOF getchar putchar


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;
}

 

C语言初识(1) | C简介 | 主函数 | 数据类型

C语言初识(2) | 变量和常量

C语言初识(3) | 字符串 | 转译字符

C语言初识(4) | 顺序 | 选择 | 循环

C语言初识(5) | 函数 | 数组 | 操作符

C语言初识(6) | 关键字

​​​​​​​C语言初识(7) | 指针| 结构体 | define

C语言初阶(8) | 选择结构 | if_else | switch

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小强在学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值