getchar与putchar用法及缓冲区详解 您所在的位置:网站首页 getchar的用法和eof getchar与putchar用法及缓冲区详解

getchar与putchar用法及缓冲区详解

2024-07-10 03:17| 来源: 网络整理| 查看: 265

一. getchar和putchar库函数的用法 1.1getchar库函数的用法

getchar 库函数的定义:int getchar (void)

使用getchar库函数的前提是引用#include 头文件getchar函数是输入字符函数(终端输入),每一次执行只读取一个字符。若输入多个字符时:例:1234,就只会读取一个字符‘1’,下一次调用,则读取字符’2’,依次往后。getchar函数的返回值类型是int类型,当getchar函数接收到一个字符时,它会把它转换成对应的ASCll码值,再返回。当getchar函数读取字符失败或者结束时,会返回EOF(即为-1)。getchar函数会读取回车符’\n’的。 1.2putchar库函数的用法

putchar 库函数的定义:int putchar (int character)

使用putchar库函数的前提是引用#include 头文件putchar函数接收的是介于0~127之间的十进制整型数的ASCll码值。putchar函数会把接收到字符的ASCll码值输出为对应的字符。当putchar输出字符失败或者结束时,会返回EOF(即为-1)。 1.3getchar和putchar库函数的代码实例

为了让友友萌更好的理解他们的用法,我们可以实际操作一下 实例1

#include int main() { int ch = getchar(); //输入字符‘A’ putchar(ch); //打印字符‘A’ return 0; }

程序运行时输入:A 输出结果:A

A A 按任意键关闭此窗口. . .

实例2(多组输入+循环的实例,很好的运用了getchar返回值的特性)

//实例2(多组输入+循环) #include int main() { int ch = 0; while ((ch = getchar()) != EOF) //多组输入 { putchar(ch); //输出字符 } return 0; }

程序运行时输入:abc1 输出结果:abc1 _

abc1 abc1 _ //注意getchar也是会把换行符读进去的,所以光标在下面一行 按任意键关闭此窗口. . .

实例2要注意的是,当输入abc1\n时,函数是一个一个从终端(键盘)上读取的(其实是从缓冲区上读取的),读一个打印一个,并且还会把’\n’回车符打印出来,所以结果如上面所示的光标在下面一行。

二. scanf和getchar函数的缓冲区 2.1关于缓冲区代码的错误实现

先看如下输入密码和确认密码功能的实现的代码

#include int main() { char a =0; printf("请输入密码:--->"); scanf("%d", &a); printf("请确认密码:--->"); int ch = getchar(); if (ch == 'Y') printf("确认成功\n"); else printf("确认失败\n"); return 0; }

想问问大家,这种代码能到达我们想要的效果吗?当然不能。 程序运行时输入:Y 输出结果:

请输入密码:--->Y 请确认密码:--->确认失败 按任意键关闭此窗口. . . 2.2关于缓冲区代码的正确实现

为什么会不让我确认密码,就直接输出确认失败并且结束程序了呢?不慌,小超会详细的讲解,没听懂你打我hhh。

1. 首先我们要了解缓冲区的概念,即当我们在键盘上输入数据后,系统会帮我们把数据先存储到缓冲区中,然后再通过getchar和scanf函数取走。当我们调用scanf和getchar时,系统会帮我们看缓冲区里有没有数据,如果有,,就会直接读取,不用再等待终端输入了。

2. 其次对照上述实例中scanf相关代码

char password[20]={0}; printf("请输入密码:--->"); scanf("%d", &password);

当我们输入abc1\n时,系统会先把字符串存储到缓冲区,然后scanf函数才会读取缓冲区中\n之前的字符串。 注意:这时候缓冲区里面还存储着一个回车符:\n呢。过程详情如下图所示:

在这里插入图片描述

3. 最后对照上述代码中getchar相关代码

printf("请确认密码:--->"); int ch = getchar();

当我们调用getchar函数时,系统会帮我们看缓冲区里有没有数据,这是缓冲区里有一个字符’\n’,则会直接读取这个字符,即ch = '\n’,所以直接确认失败。过程详情如下图所示:

缓冲区 2 4.根据上述的缓冲区的原理,应该如何更改我们的代码,来实现我们想要的功能呢?小超粉萌肯定想到了,只要在执行getchar函数之前把缓冲区里的数据清空(即全部拿出来),getchar函数就可以正常读入了。

#include int main() { char a = 0; printf("请输入密码:--->"); scanf("%d", &a); while (getchar() != EOF) //清空缓冲区里的所有数据!!! { ; } printf("请确认密码:--->"); int ch = getchar(); if (ch == 'Y') printf("确认成功\n"); else printf("确认失败\n"); return 0; } 三. 总结

总的来说,对于初学者而言,getchar和putchar字符函数的用法是难以理解的,特别是其中它们的接收值和返回值。而且在运用getchar输入字符函数时,一定要谨慎缓冲区的存在,在必要的情况下要清空缓冲区。本文包含了所有相关要点,希望可以帮到你们,若还有什么疑惑,欢迎私信或者评论喔。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有