C语言--getchar和putchar函数和它们的一些例子

本文详细介绍了C语言中的getchar和putchar函数,包括它们的功能、使用方法以及与scanf和printf的区别。通过实例展示了如何使用这两个函数进行字符输入输出,并解释了输入缓冲区的概念及其在程序中的影响。文章还讨论了如何处理输入缓冲区的常见问题,如空格和回车的影响,以及如何清除缓冲区。
摘要由CSDN通过智能技术生成

getchar函数

getchar函数和scanf函数相类似,都是用来打印东西的。不同的是getchar函数只能用来从stdin(标准输入)中获取字符但是scanf可以输入整形和浮点型数据。

getchar函数的写法

int main()
{
    int ch = getchar();
    printf("%c", ch);
    return 0;
}

可能大家会有疑问了,为什么我这里ch明明是用来存储getchar函数读取的字符变量,为什么要用int而不是char呢?我来解释一下,在这里有两点原因:1.举个例子,我们想打印字符‘a’,字符‘a’在C语言中是以ASCII码值97来存储的,所以int在这里存储ASCII码值97,也可以起到打印‘a’的作用。2.当getchar读取失败,错误时,getchar会返回EOF,EOF就是整形数据 -1,我们知道整形数据占4个字节,而char字符数据占1个字节,如果我们使用char来定义ch,很显然,内存不够。综上考虑,所以我们使用int来定义ch。


putchar函数 

putchar函数和printf函数相类似。用来向stdout(标准输出)打印字符数据。

putchar函数的写法

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

总结

putchar和getchar函数只能用来操作字符,而且一次只能操作一个字符,与printf和scanf函数相比较有一些不足,所以我们在使用时要注意。


关于getchar和putchar的几个代码实例

1

我们可以不停地输入字符,然后输出输入的字符。这个代码不会终止,我们可以使用ctrl+z来终止这个程序(返回EOF)。注:而且括号一定要记着加,否则当你输入一个字符后,它会不停地打印输入的字符。一定要注意运算符号优先级。


2

 我们想设计一个简单的登录过程的程序。这样写代码如果不细看感觉是没有问题的。我们运行一下。会出现bug,当我们输入完密码后,程序直接出现确认失败。

 我们不得不提到一个东西,那就是输入缓冲区我们用键盘输入的字符并不能直接被放到函数中(scanf ,putchar等等),而是先被放到了缓冲区中,之后函数再从缓冲区中一个一个地取出字符。而在上面的程序中我们输入完密码后又要输入一个回车,所以回车也被存储到了输入缓冲区中。而回车是为了让之前的数组进入到input中去,并没有被scanf中的input带走。所以这时候缓冲区中就有了一个\n。当程序向下执行时,getchar从缓冲区拿东西,如果缓冲区中没有东西,他会等我们输入东西,而这时\n在缓冲区中,直接拿\n不再等待。为了消除这个bug,我们可以把这个\n拿走。只需要在scanf函数后面写上一个getchar(),于是\n就被拿走。程序可以正常运行了。

 (修改后的代码)


3

在修改完上面的bug后,我们接着使用这串代码。当我们输入密码时,给密码中间来个空格会如何--abcd hehe。可以明确地知道,input只会把空格之前的abcd从输入缓冲区拿走,而 hehe\n被留在了输入缓冲区。因此getchar()只能拿走一个空格。缓冲区仍然有hehe\n,依然无法得到我们想要的效果。为此,我们可以利用循环修改代码清理缓冲区:


以上就是鄙人对getchar,putchar函数的认识,如果觉得对您有帮助,一键三连啊!也希望各位可以提出一些宝贵的意见,谢谢!

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_w_z_j_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值