【C语言学习】getchar和putchar

文章讲述了C语言中的getchar和putchar函数,它们用于字符的读取和打印。getchar返回的是字符的ASCII码值,包括在读取结束时返回EOF。putchar在写入错误时也会返回EOF。文章通过一个密码确认的例子,展示了由于缓冲区的 未被处理导致的bug,并提供了修正代码,强调了清除缓冲区 的重要性。
摘要由CSDN通过智能技术生成

1. getchar

getchar是获取字符的C语言库函数。

int getchar(void)

返回类型为int,参数为void。
可能会有这样的疑问:getchar既然是获取字符的,为什么返回类型是int 呢?其原因如下:
1、getchar返回的其实是字符的ASCII码值(整数)。
2、getchar在读取结束或者失败的时候,会返回EOF(-1)。

2. putchar

putchar是打印字符的C语言库函数。

int putchar( int c );

成功时,返回写入的字符。如果发生写入错误,则返回EOF(-1)。
综上,我们可以看出EOF其实表示文件读取结束,即end of file。
getchar 和putchar 函数可以代替scanf 和 printf 的输入输出字符的功能。但两者也存在一定的差异,具体表现如下例所示。

3. getchar 和putchar 应用

输入和确认密码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

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

运行结果:

分析出现bug的原因:
1、开始输入密码,并按回车确认

2、scanf来接走密码,但是不会取走\n

3、getchar接收字符,发现缓冲区里面有\n,此时,ch==\n,不等于’Y’,确认失败。
解决办法:需要用getchar()将 \n 消耗掉。

修改好后的代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	int ch = 0;
	while ((ch = getchar()) != '\n');
	{
		;
	}

	printf("请确认密码(Y/N):>");
	int ret = getchar();
	if (ret == 'Y')
	{
		printf("YES\n");
	}
	else
	{
		printf("NO\n");
	}

	return 0;
}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值