【getchar】在C语言中getchar的使用方法和读取规则


前言

今天为大家分享getchar在C语言中的使用


一、getchar是什么?

getchar中文意思是获取字符,getchar函数从标准输入输出里读取下一个字符,返回类型为int整形,返回用户输入的ASCII码值,如果到达文件末尾或者出错返回EOF

二、getchar的使用方法

1.只获取一次(字符/字符串)的代码样例

代码如下(示例):

#include<stdio.h>
int main()
{
	int ch = getchar();
	putchar(ch);
	return 0;
}

代码执行结果
在这里插入图片描述

2.循环获取(字符/字符串)的代码样例

代码如下(示例):

#include<stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}
	return 0;
}
注意事项
1.这里的EOF并不是输入EOF循环结束
2.EOF的真实值是-1
3.这里的Ctrl+z的效果便是EOF

代码执行结果
在这里插入图片描述
到这里有些细心的朋友就会发现代码里面并没有换行指令为什么运行的结果会自动换行?

getchardu读取字符的时候真的是在键盘上读取的吗?
getchar             缓冲区              键盘
其实在getchar和键盘之间有个缓冲区,在缓冲区是空
的时候,getchar就会等待键盘输入字符,当用户输入
A时其实多输入了一个回车,这是缓冲区里面就有A\n
getchar首先读取了A然后输出,然后又上去读取了\n
再输出\n就达到了换行的效果,所以B会在第三行输入

三、getchar的读取规则

讲了这么多可能很多人都不明白这么一个代码有什么用呢?其实在很多地方都会用到,比如模拟用户登入场景。但是写这个代码的时候就要注意getchar的读取规则
代码如下(示例)

#include<stdio.h>
int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功");
	}
	else
	{
		printf("确认失败");
	}
	return 0;
}

代码运行结果
在这里插入图片描述
在这里我们看到都还没确认就直接输出确认失败,到这里大家应该都明白了是什么问题吧?没错就是\n的问题,这里getchar发现缓冲区里面还有一个\n就没等我们输入直接把\n读走
那应该如何解决呢?
代码如下(示例)

#include<stdio.h>
int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	getchar();
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功");
	}
	else
	{
		printf("确认失败");
	}
	return 0;
}

代码运行结果
在这里插入图片描述
接下来我们再想大家思考一个问题,当密码里面有空格的时候还会确认成功吗?
在这里插入图片描述
没错还是会失败,这又是为什么呢?因为数组把空格前面的123456读走了,但是缓冲区里还剩下空格abcdef\n所以getchar还是会读取缓冲区里面的东西
那该怎么解决呢?
代码如下(示例)

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	int temp = 0;
	while((temp=getchar())!='\n');
	{
		;
	}
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功");
	}
	else
	{
		printf("确认失败");
	}
	return 0;
}

代码运行结果
在这里插入图片描述


总结

从上面我们学习到了getchar,发现其实getchar的使用很简单就是读取字符,但是难的是它的读取字符是的规则,所以我们在使用getchar的时候一定要慎重思考它的读取规则。

  • 34
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值