C语言中getchar()与putchar()函数详解

 更新时间:2023年01月08日 09:43:32   作者:Jambo!  
本文主要介绍了C语言中getchar()与putchar()函数详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

getchar()与putchar()getchar()getchar()的一个重要机制getchar()与scanf()区别 putchar() 实例1.清空缓冲区2.字符串中有空格

getchar()与putchar()

getcharputchar其实最基本的作用就是用getchar读取一个字符,再用putchar输出一个字符

基本用法:

#include <stdio.h>

int main()
{
	char c = 0;
	c = getchar();
	putchar(c);
	return 0;
}

运行结果:

在这里插入图片描述

输入一个a,然后再打印a

这里getcharputcharscanfprintf的作用基本一致,只不过getchar,putchar只对字符类型操作,而scanf,printf对指定的类型进行操作

getchar()

getchar的定义:
int getchar(void)

  • 返回类型是int值,所以返回的是字符的ASCII码
  • 参数列表中是void,所以不必在括号中传参数
  • 如果getchar读取失败,就会返回EOF

getchar()的一个重要机制

getchar函数的作用与键盘间,存在一个输入缓冲区,从键盘输入的内容会存在这个缓冲中,接下来getchar函数会从缓冲区中取走内容

在这里插入图片描述

因为getchar是对于字符进行操作,所以每次执行getchar都会取走输入缓冲区中一个字符
并且getchar还会取走回车也就是\n与空格

我们用下面的代码进行对输入缓冲区机制的测试:

int main()
{
	char ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}
	return 0;
}

当输入一个字符a时,同时我们会按下回车,此时输入缓冲区中就有两个字符:a\n

在这里插入图片描述

首先,getchar()会先取走字符a,然后通过putchar打印出来

在这里插入图片描述

接着循环,getchar()取走字符\n,然后通过putchar打印出来,所以在输出中光标不在输出的a的后面,而在a的下一行

在这里插入图片描述

接着,输入缓冲区中以无内容,getchar()就会读到EOF,退出循环

还可以用以下代码更进一步验证getchar()对于回车的读取:

int main()
{
	int i = 0;
	char ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
		i++;
	}
	printf("%d", i);
	return 0;
}

输入字符ab,这里实际上是输入a后,按一次回车,输入b后,按一次回车,所以输入缓冲区中的内容为:a\nb\n,所以getchar()会读取四次,所以i的值为会是4

在这里插入图片描述

getchar()与scanf()区别

*getcharscanf的主要区别是getchar能读取输入缓冲区中的一切字符类型,包括空格与回车,而scanf()不能读取空格与回车

putchar()

putchar的定义:

int putchar ( int character );
  • 传的参数是要输出的字符变量
  • putchar的用法与printf("%c",character)一致,都是输出一个字符

实例

1.清空缓冲区

下面一段把代码是输入一段密码,并且还要用getchar()接受是否确认密码的选项:

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

我们输入一端密码后,还未输入Y或N,代码就自动打印“失败”并退出运行

在这里插入图片描述

这其实还是scamf无法读取回车在作祟
当我们输入1234567后,此时在输入缓冲区中其实存的是:1234567\n

请添加图片描述

scanf("%s", password);语句读取字符串,因为它无法读取\n所以此时scanf只会读取走1234567,在输入缓冲区中还有\n

请添加图片描述

所以在之后的ch = getchar();中,就会读取\n,不等于Y,所以会打印失败

所以,要把缓冲中的 \n 消化掉,也就是清空缓冲区

只要,再写一个getchar()语句,将\n读取走,就可以了

代码如下:

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

运行成功

在这里插入图片描述

2.字符串中有空格

以下代码是输入一个字符串再输出:

int main()
{
	char str[20] = { 0 };
	scanf("%s", str);
	printf("%s", str);
	return 0;
}

如果输入的字符串是连续的,也就是没有空格的,此代码正常运行

在这里插入图片描述

如果输入的字符串是有字符的,就会出现错误

在这里插入图片描述

错误的原因还是scanf无法读取缓冲区中的空格,所以接下来要使用getchar去读取字符串

因为输入的一段字符串一定会是以\n为结尾

在这里插入图片描述

所以在前面的while ((ch = getchar()) != 'EOF)改成while ((ch = getchar()) != '\n')即可,只要不遇到\n就一直读取下去

代码如下:

int main()
{
	char str[20] = { 0 };
	char ch = 0;
	while ((ch = getchar()) != '\n')
	{
		putchar(ch);
	}
	return 0;
}

运行结果:

在这里插入图片描述

请添加图片描述

 到此这篇关于C语言中getchar()与putchar()函数详解的文章就介绍到这了,更多相关C语言 getchar()与putchar()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言绘制雷达图的示例代码

    C语言绘制雷达图的示例代码

    常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图,其中还有一种雷达图的绘制也较难,本文为大家提供了雷达图的绘制方法,需要的可以参考下
    2024-02-02
  • C++实现简易通讯录功能

    C++实现简易通讯录功能

    这篇文章主要为大家详细介绍了C++实现简易通讯录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C语言实现动态爱心代码

    C语言实现动态爱心代码

    这篇文章主要为大家详细介绍了如何通过C语言实现动态爱心的效果,文中的示例代码讲解详细,具有一定的学习价值,还不快跟随小编一起get李峋同款爱心代码
    2022-11-11
  • 盘点分析C语言中少见却强大的字符串函数

    盘点分析C语言中少见却强大的字符串函数

    这篇文章主要为大家盘点及分析C语言中少见却强大的字符串函数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • C++可变参数模板深入深剖

    C++可变参数模板深入深剖

    个可变参数模板(variadic template)就是一个接受可变数目参数的函数模板或类模板,下面这篇文章主要给大家介绍了关于C++可变参数模板的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 带你了解C语言的数据的存储

    带你了解C语言的数据的存储

    这篇文章主要为大家详细介绍了C语言的数据的存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-08-08
  • 排序算法模板实现示例分享

    排序算法模板实现示例分享

    这篇文章主要介绍了排序算法模板实现示例,需要的朋友可以参考下
    2014-03-03
  • C语言实现推箱子项目

    C语言实现推箱子项目

    这篇文章主要为大家详细介绍了C语言实现推箱子项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C语言实现折半查找法(二分法)

    C语言实现折半查找法(二分法)

    这篇文章主要为大家详细介绍了C语言实现折半查找法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • QT中对话框的使用示例详解

    QT中对话框的使用示例详解

    这篇文章主要为大家详细介绍了Qt中对话框的使用,以及QMessageBox类中常见函数的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-11-11

最新评论