C语言中scanf和getchar函数的使用详解
创作时间:
作者:
@小白创作中心
C语言中scanf和getchar函数的使用详解
引用
CSDN
1.
https://blog.csdn.net/2401_87025655/article/details/142694774
在C语言编程中,正确处理输入函数scanf和getchar是一个常见的挑战。本文通过一个具体的密码输入和确认场景,详细解释了这两个函数的工作原理及其在实际应用中的注意事项。
问题引入:如何实现输入一串密码,如:“123 xxxx” ,然后读取并确认,是 -- Y;否 -- N。
自然的,我们想到用scanf,但是在使用过程中你是否遇到跟我一样的困惑呢?如下:
打印的和输入的不一样???!!!
这就不禁让我们思考:scanf到底是怎么读取数据的?
其实,当我们输入“123 xxxx”时,我们都会敲一下空格键,对不对?
那么,这个时候,我们就向缓冲区输入了
而scanf不读取“空格”、"\n",所以scanf只会把123(隐含‘\0’)读走。
我们可以通过以下例子说明输入数据时还向缓冲区输入了‘\n’👉
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char mi_ma[20] = { 0 };
printf("输入密码:>");
scanf("%s", mi_ma);
printf("请确认密码(Y/N):>"); //Y -- Yes ;N -- No
int ch = 0;
ch = getchar(); //打算用getchar读取单个字符,即Y或N
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
运行结果👉
输入密码:>1234
请确认密码(Y/N):>确认失败
都还没输入Y/N,直接就显示“确认失败”?!!!
————这是因为getchar读取的是‘\n’,而还不及读取Y/N。
改进如下:👉
tip:ch之所以定义为整型,是因为getchar()的返回值为对应字符的ASCII码值。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char mi_ma[20] = { 0 };
printf("输入密码:>");
scanf("%s", mi_ma);
getchar(); //用来清除‘\n’
printf("请确认密码(Y/N):>"); //Y -- Yes ;N -- No
int ch = 0;
ch = getchar(); //打算用getchar读取单个字符,即Y或N
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
运行结果👉
输入密码:>1234
请确认密码(Y/N):>Y
确认成功
回到一开始的问题👉
问题引入:如何实现输入一串密码,如:“123 xxxx” ,然后读取并确认,是 -- Y;否 -- N。
认识到 scanf不读取“空格”、"\n"之后,又因为getchar()读取单个字符,所以我们不妨用多次getchar()读取“从空格到‘\n’之间的部分”。题解之一如下:👉
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char mi_ma[20] = { 0 };
printf("输入密码:>");
scanf("%s", mi_ma);
while (getchar() != '\n')
{
;
}
printf("请确认密码(Y/N):>"); //Y -- Yes ;N -- No
int ch = 0;
ch = getchar(); //打算用getchar读取单个字符,即Y或N
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
运行结果👉
输入密码:>123 xxxx
请确认密码(Y/N):>Y
确认成功
热门推荐
春晚歌曲:时代的旋律与文化的记忆
红外成像仪开发难点的兼容性问题
视频压缩技术简介
备孕期间可不可以吃阿胶糕
为什么春天是五颜六色?
猫咪吐舌可能是散热或好奇
养胃的茶有哪些?什么茶比较适合胃不舒服的时候喝
不同状态下征信怎么养?(征信养多久)
市场大幅提升今年通胀预期!恐进一步推高巴西利率水平
经典英文歌曲歌词赏析:Oasis《Wonderwall》
桂鱼的刺多吗?
Excel表格横向转纵向的操作艺术
汽车车牌丢失后应怎样处理?处理过程中需要准备哪些材料?
如何分析黄金与其他贵金属的特性?这种特性对储存和投资有何意义?
LoRA融合的这个平涂风,简直就是全能!
碳化硅外延层厚度及其均匀性的无损检测——红外显微系统
隐形眼镜千万别瞎戴!这些指标一定要看
黄金投资攻略:从策略制定到风险把控全解析
期望收益值怎么算
白桑葚与黑桑葚哪种好?哪种营养丰富?
奥音民国二十五年50枚铜币:珍稀性与收藏价值的深度解析
【提示】清明祭扫地铁攻略:8线18站设接驳专线,多线延时加开
热电阻与热电偶的区别
甘草片和红药水为什么买不到了?知道真相的我有点慌
艺术融合与情感传达:引领化妆品品牌命名的前沿趋势
太多,穿越时空的旋律,电视剧情感的共鸣
守望先锋:源氏英雄克制策略与技能大招释放精髓
量具的种类有哪些?量具的选用原则和具体要求
汽车保险费用计算全攻略:影响因素大盘点
无锡马拉松积极应对野鸳鸯事件