1. getchar
getchar是获取字符的C语言库函数。
int getchar(void)
返回类型为int,参数为void。
可能会有这样的疑问:getchar既然是获取字符的,为什么返回类型是int 呢?其原因如下:
1、getchar返回的其实是字符的ASCII码值(整数)。
2、getchar在读取结束或者失败的时候,会返回EOF(-1)。
2. putchar
putchar是打印字符的C语言库函数。
int putchar( int c );
成功时,返回写入的字符。如果发生写入错误,则返回EOF(-1)。
综上,我们可以看出EOF其实表示文件读取结束,即end of file。
getchar 和putchar 函数可以代替scanf 和 printf 的输入输出字符的功能。但两者也存在一定的差异,具体表现如下例所示。
3. getchar 和putchar 应用
输入和确认密码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char password[20] = { 0 };
int ch = 0;
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N):>");
ch = getchar();
if (ch == 'Y')
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
运行结果:
分析出现bug的原因:
1、开始输入密码,并按回车确认
2、scanf来接走密码,但是不会取走\n
3、getchar接收字符,发现缓冲区里面有\n,此时,ch==\n,不等于’Y’,确认失败。
解决办法:需要用getchar()将 \n 消耗掉。
修改好后的代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
int ch = 0;
while ((ch = getchar()) != '\n');
{
;
}
printf("请确认密码(Y/N):>");
int ret = getchar();
if (ret == 'Y')
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
运行结果: