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
确认成功
热门推荐
吃山楂片对血糖有影响吗
6步搞定!小葱拌豆腐秘诀:焯水+冰镇嫩滑
【法护生态环境】林地间种农作物?危害可不小!
俄罗斯的选品喜好,俄罗斯OZON怎么根据选品喜好来选
“天使之城”普埃布拉,探寻地下金字塔
商朝存在证据:历史文献与考古发现的一致性
免疫介导性溶血性贫血(IMHA)
Miniconda安装、虚拟环境配置与使用指南
爆炒花甲,是一种以花甲为主要食材的菜品,口感鲜美,香气扑鼻
英语语感怎么培养
南斗六星:人马座中的六颗璀璨恒星
基于REST API的开放平台设计架构:关键组成部分与实现方式
美元走强非美货币承压 人民币中间价创14个月新低
沧浪传奇:从孔子到屈原,解读“沧浪歌”背后的隐者文化
医院属于事业编还是企业编?全方位解读
"史上最悲剧的男人"唐舞麟
“天价彩礼”何时休?
婚姻里的温暖:如何在家庭中建立和谐的夫妻关系?
2025年八省首届新高考如何投档录取(最新政策解析)
过年到底该回娘家,还是回婆家?这是最好的解决办法
马来西亚:四小虎之一,地缘优势下的经济崛起之路
广东北江中学怎么样、好不好(2024资讯)
西安市人民医院(西安市第四医院):急性酒精中毒急救知识科普
深圳注册公司条件及所需资料详解
皇马欧冠三连冠决赛记录及尤文皇马历史交战记录
高血压患者运动指南:运动类型、计划制定与注意事项全解析
揭秘激素治疗:为什么它能让病好得快?
新能源智能汽车消费侧观察:市场渗透率超50%,消费群体转向普通大众
经常咳嗽、胸痛不是病?它能带来的这些疾病你了解吗?
关于偏头痛的常见误解以及如何缓解