getchar与putchar用法及缓冲区详解 | 您所在的位置:网站首页 › getchar的用法和eof › getchar与putchar用法及缓冲区详解 |
一. 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’,所以直接确认失败。过程详情如下图所示:
总的来说,对于初学者而言,getchar和putchar字符函数的用法是难以理解的,特别是其中它们的接收值和返回值。而且在运用getchar输入字符函数时,一定要谨慎缓冲区的存在,在必要的情况下要清空缓冲区。本文包含了所有相关要点,希望可以帮到你们,若还有什么疑惑,欢迎私信或者评论喔。 |
CopyRight 2018-2019 实验室设备网 版权所有 |