C语言:简单了解getchar函数与putchar函数


前言

在上一节当我们主要学习了分支语句,那么在这一节当中,我们就要开始学习我们的循环语句了。主要是while语句、for语句、do while语句。

一、getchar与putchar

首先,在开始学习我们的循环结构之前,我们要了解两个新的函数,getchar和putchar函数。

二、getchar函数简单介绍

getchar函数的主要作用就是读取一次可以读取一个字符。需要注意的一点就是,getchar函数的返回值是int类型

简单来说,getchar()函数就是从键盘上面(缓冲区)读取用户的输入,返回读取的字符的ASCII码值。

下面我们用一段模拟用户输入密码的场景的代码来主要说明getchar函数的用法

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

	return 0;
}

从这一段代码当中我们可以看出来,代码当中的getchar函数主要是从键盘当中读取输入的Y/N,若输入Y则判断确认成功,若输入N则确认失败,但是我们运行代码之后则出现了这种情况:

在这里插入图片描述

那么为什么会出现这种情况呢?程序甚至没有让我们选择就直接确认失败了,这到底是为什么呢?
这里就要牵涉到getchar函数的读取原理了:getchar函数主要是从缓冲区里面读取函数

在这里插入图片描述

直接用上面这一张图片来描述比较简单明了,假设我们输入的密码为“ABCDEF”,我们使用scanf函数输入时候,把“ABCDEF”输入进去之后,键盘当中的缓冲区是否只有“ABCDEF”这六个字符呢?答案是并不是的,我们是否注意到,我们在输入完之后,有敲击了一次回车键。
当我们敲击了回车键之后,缓冲区里面其实是“ABCDEF \n”,当代码继续向下运行的时候,"ABCDEF"被存放到password当中缓冲区留下了一个“\n”,这时候程序继续向后面执行,getchar函数就会把\n给读取出来,并且给ch,于是,这就导致了我们后面的结果了。

那么既然出现了这种情况,我们应该怎么处理呢?同样也很简单,我们只需要把缓冲区里面的“\n”给清理了就可以了,只需要在我们ch前面再定义一个getchar函数把缓冲区里面的\n给读取走即可。修改后的代码为:

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

	return 0;
}

这个时候我们再看我们程序的运行结果:
在这里插入图片描述
但是这种方法也有一定的缺陷,如果我们输入“123456 ABCDEF” 的时候同样会出现第一种情况,这样我们就可以使用第二种方法用来改进,可以使用while循环,令输入的值不等于“\n”即可,代码如下:

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

	return 0;
}

三、putchar函数简单介绍

我们已经简单了解了getchar函数的主要作用是读取,而putchar函数的主要作用就是打印字符。putchar函数的输出可以是一个字符,也可以是在0~127之间的一个十进制整型(包括0与127),也可以是用char定义好的字符型常量。

下面我们来看一段代码:(只可以打印数字字符,跳过其他字符)

#include <stdio.h>
int main()
{
  char ch = '\0';
  while ((ch = getchar()) != EOF)
{
  if (ch < '0'|| ch > '9')
    continue;
    putchar(ch);
}
    return 0;
}

我们来看输出的结果:
在这里插入图片描述

我们可以看到这段代码成功地筛选出了数字字符并且屏蔽掉了其他字符,实现的方式主要是通过限定ASCII码值的形式来实现的。判断条件当中的判断标志并不是EOF,而是一个终止符号,意思就是文件结束的标志,可以通过ctrl+z来结束循环。

好啦!这篇文章就到此结束啦,我们简单了解了这两个函数之后,在自己以后的学习当中也要慢慢去学习用到它们哦!

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值