函数解剖——深挖getchar()与putchar()

大家好,我是一只励志要翻身的小牛🐮,今天我们刨根问底,探究getchar()与putchar()的那点事!

文章目录

一、详解字符输入函数getchar()

1、函数getchar()原型

2、函数getchar()的输入原理

3、实践出真知

二、详解字符输出函数putchar()

1、函数putchar()原型

2、函数putchar()的输出方式

3、实践出真知

三、结语


一、详解字符输入函数getchar()

1、函数getchar()原型

目前我们要做的是从宏观上考察函数getchar()的特点,就像你认识一个陌生人时,在对它进行深入了解之前,先看看它的外貌和举止一样。下面我们对getchar()函数给出如下描述:👇

特征:函数getchar()的返回值为int类型

           函数getchar()的参数为空

功能:它的作用是从stdin流中读入一个字符

注意:函数getchar()没有参数,函数的返回值就是从终端键盘读入的字符。其实这里就暗示了函数getchar()的参数是stdin——标准输入(这里指键盘输入)

问:既然返回值是读入的字符,为什么是int类型?

答:在C语言中,字符在存储的时候实际上是以ASCII码值进行存储的,每个字符都有对应的ASCII码值。所以既可以用char接受返回值,也可以用int接受返回值。

2、函数getchar()的输入原理

(1)函数getchar()采用行缓冲输入方式,即输入的字符先被放到输入缓冲区中,getchar()每次从输入缓冲区中读取一个字符,直到遇到回车键(回车键 \n 也一同被放到输入缓冲区)或者文件结束标志EOF时程序才认为输入结束。也就是说如果stdin有数据的话不用输入它就可以直接读取了,第一次调用getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。

(2)也就是说,用getchar()读取字符实际上是按照文件的方式读取的,文件中一般都是以行为单位的,因此getchar()也是以行为单位读取的,这就是为什么getchar()结束输入或退出时要读到一个换行符或文件结束符EOF(vs编译器中EOF为Ctrl+z)

3、实践出真知

观察如下代码,分析输入打印过程:👇

//分别打印a、b、c、d
#include<stdio.h>
int main()
{
	int count = 0;
	int ch = 0;
	while((ch=getchar())!=EOF)
	{
		count++;
		printf("第%d次打印%c\n",count,ch);
	}
	return 0;
}

详解:从输出结果可以看出,我们从头到尾只输入了一次:abcd 当我们回车,键入数据后,每循环一次屏幕上打印一行数据,当打印完a、b、c、d四行数据后,由于输入缓冲区中还剩一回车(\n)所以第五次循环打印回车(\n),此时因为未遇到结束符EOF所以屏幕光标继续闪烁等待输入,此时在VS编译器下键入Ctrl+z使循环停止。如图:

注意:在一般情况下,getchar()的返回值是终端所输入的字符,这些字符在系统中对应的ASCII码值通常都是非负的。但有时getchar()也可能返回负值即EOF(大多数编译器下EOF为-1)这时将getchar()的返回值赋给char型变量是不合适的,因此为了让定义的变量包含getchar()返回的所有可能值,我们通常将其返回值赋给int类型变量。


二、详解字符输出函数putchar()

1、函数putchar()原型

特征:函数putchar()的返回值为int类型

           函数putchar()的参数为 character-- 这是要被写入的字符。该字符以其对应的 int 值进行传递。

功能:把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout

2、函数putchar()的输出方式

putchar函数的基本格式为:putchar(c),通常与getchar()结合使用:

(1)当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符);

(2)当c为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符;

(3)当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。

注意:函数putchar()一次传递一个参数,输出一个字符

3、实践出真知

1、输出ABC

#include<stdio.h>
int main()
{
	putchar('A');
	putchar(66);
	char ch = 'C';
	putchar(ch);
	return 0;
}
//输出:ABC

 2、使用getchar()、putchar()实现输入A,打印A

#include<stdio.h>
int main()
{
	int ch = getchar();
	putchar(ch);
	return 0;
}
//输入:A
//打印:A

三、结语

好啦,今天的全部内容就到这里了,如果本文对你有所帮助的话,请给博主一个一键三连哦,您的支持就是我写作的动力🥰铁汁们保持Coding,我们下期再见!

 

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不摸鱼的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值