目录
引子:
我们发现用getchar()和putchar()实现了scanf和printf的功能,但是,getchar()和putchar()只是针对于字符。
定义:
查阅文档(cplusplus.com - The C++ Resources Network)如图:
getchar():
putchar():
大概了解了函数的定义后,我们来看下面这段代码:
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
运行结果如下:
工作原理:
下面来讲一下工作原理
getchar每次拿字符,并不是直接从键盘录入,而是键盘录入的字符,会存在一个缓存中里面,getchar在缓冲区里面一次拿一个字符
运用场景举例:
int main()
{
char password[10] = { 0 };
int ch = 0;
printf("输入密码:");
scanf("%s", password);//数组名本来就是地址,所以不用&符号
printf("请确认密码(Y/N):");
ch = getchar();
if (ch == 'Y')
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
运行结果:
我们发现,我们密码输入完之后,还没等我们确认,就直接确认失败了。
分析:scanf遇到空格或者回车(\n),就停止录入了,所以,拿走了密码12345,但后面的回车(\n),还在,所以getchar拿走了回车(\n),导致确认失败。
我们只需要把这个回车(\n)消化掉就行,再用一个getchar就行。
关于scanf和printf :
scanf——按照指定格式输入
printf——按照指定格式输出
%c —— 字符
%s —— 字符串
%d —— 整型
%f —— float浮点数
%lf —— double浮点数
%p —— 打印地址
但我们不需要深入研究,大概了解就行。
结语:
内容就分享到这里,关于“缓冲区”,我们需要好好理解一下,看完自己再实践一下,对理解更有帮助,看到这里不妨点个赞再走,如有遗漏或者错误,还望大佬们指出,谢谢。