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
确认成功
热门推荐
运动,帮你缓解压力的“特效药”
安全理财指南:几种常见理财方式的特点与注意事项
用U盘制作PE启动盘详细教程:从准备到安装的完整指南
空军招飞2025最新消息:成绩需要多少分?没过一本线怎么办?
如何调节离合器踏板的自由行程
货车离合器调低操作指南:步骤与注意事项全解析
广州白云站突破700万人次!最新搭乘攻略来了
智谋巅峰却遭天命捉弄?揭秘庞统之死的惊天秘密!
如果庞统不死,刘备真的能如谚语中那样可安天下吗?
感悟人生:从平凡中发现不凡
长白山聚龙火山石林景区:雪谷穿越与冰泉围炉的完美结合
【运动科学】甜菜根真的能增强运动表现和促进肌肉恢复吗?
西安电子科技大学全面介绍:实力、专业与就业前景分析
独具东方韵味的开放世界,还真被仙剑做出来了
基层党建工作的5种创新实践!
宝宝抬头要怎么训练
真争气!释小龙模仿李连杰,翻拍《中南海保镖》,仅700万成本票房夺冠
不确定时代的哲学应对:研究哲学的未来挑战与前瞻
【BCJ】急性早幼粒细胞白血病的分化综合征,个性化管理策略有助于降低早期死亡
《阿甘正传》:一个普通人非凡的人生旅程
布洛芬缓释片真的对缓解牙疼有效吗?探索其作用机制与使用建议
nvidia-smi 命令详解:GPU监控与管理工具使用指南
什么是陌刀?诞生于何时?
昙花一现的冷兵器王陌刀,在唐朝的扩张与守护中,发挥了何种作用
临床医学专科生就业前景
中国房产人均资产(中国房产人均资产排名)
居里夫人已经去世90年了,遗骸仍需厚重铅板覆盖包裹,究竟为何?
网暴后的心理疾病健康护理
F119发动机推重比真相:9还是7?五代发动机技术深度解析
货币政策理念的关键转折——日本央行2024年7月会议解读