一. getchar和putchar库函数的用法
1.1getchar库函数的用法
getchar 库函数的定义:int getchar (void)
- 使用getchar库函数的前提是引用#include <stdio.h>头文件
- getchar函数是输入字符函数(终端输入),每一次执行只读取一个字符。若输入多个字符时:例:1234,就只会读取一个字符‘1’,下一次调用,则读取字符’2’,依次往后。
- getchar函数的返回值类型是int类型,当getchar函数接收到一个字符时,它会把它转换成对应的ASCll码值,再返回。
- 当getchar函数读取字符失败或者结束时,会返回EOF(即为-1)。
- getchar函数会读取回车符’\n’的。
1.2putchar库函数的用法
putchar 库函数的定义:int putchar (int character)
- 使用putchar库函数的前提是引用#include <stdio.h>头文件
- putchar函数接收的是介于0~127之间的十进制整型数的ASCll码值。
- putchar函数会把接收到字符的ASCll码值输出为对应的字符。
- 当putchar输出字符失败或者结束时,会返回EOF(即为-1)。
1.3getchar和putchar库函数的代码实例
为了让友友萌更好的理解他们的用法,我们可以实际操作一下
实例1
#include <stdio.h>
int main()
{int ch = getchar(); //输入字符‘A’putchar(ch); //打印字符‘A’return 0;
}
程序运行时输入:A
输出结果:A
A
A
按任意键关闭此窗口. . .
实例2(多组输入+循环的实例,很好的运用了getchar返回值的特性)
//实例2(多组输入+循环)
#include <stdio.h>
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 <stdio.h>
int main()
{char a =0;printf("请输入密码:--->");scanf("%d", &a); printf("请确认密码:--->");int ch = getchar();if (ch == 'Y')printf("确认成功\n");elseprintf("确认失败\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’,所以直接确认失败。过程详情如下图所示:
4.根据上述的缓冲区的原理,应该如何更改我们的代码,来实现我们想要的功能呢?小超粉萌肯定想到了,只要在执行getchar函数之前把缓冲区里的数据清空(即全部拿出来),getchar函数就可以正常读入了。
#include <stdio.h>
int main()
{char a = 0;printf("请输入密码:--->");scanf("%d", &a);while (getchar() != EOF) //清空缓冲区里的所有数据!!!{;}printf("请确认密码:--->");int ch = getchar();if (ch == 'Y')printf("确认成功\n");elseprintf("确认失败\n");return 0;
}
三. 总结
总的来说,对于初学者而言,getchar和putchar字符函数的用法是难以理解的,特别是其中它们的接收值和返回值。而且在运用getchar输入字符函数时,一定要谨慎缓冲区的存在,在必要的情况下要清空缓冲区。本文包含了所有相关要点,希望可以帮到你们,若还有什么疑惑,欢迎私信或者评论喔。