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函数的认识,如果觉得对您有帮助,一键三连啊!也希望各位可以提出一些宝贵的意见,谢谢!