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
确认成功
热门推荐
达州低空经济扬帆起航:无人机医疗物资运输首航开启全新篇章
天津市公务员考试报名指南与备考建议
营养师解析168断食法,掌握关键4大法则!
海恩塞弗罗的战绩:历史真相与传奇的辨析
中国弹簧行业市场运行态势、市场规模及发展趋势研究报告
看病不能盲从“D医生”
反器材步枪设计:TX90
打工人的节俭秘籍:营养满分的平价便当搭配法
草莓热量揭秘:减肥路上的甜蜜小伙伴
个体户如何利用电子报税系统
国产轮胎怎么选择并保证质量?这种选择轮胎的方式有哪些标准?
银行的银行卡可以开通自动转账功能吗?
个人申请工伤认定流程
鹦鹉的日常饲养与营养品(了解如何为你的鹦鹉提供均衡的营养)
鹿茸多少钱一斤?(新鲜鹿茸多少钱一斤)
痰湿体质如何锻炼
右侧肋骨下方疼痛
新会陈皮:青皮、二红、大红皮的“色香味”差异全解析
嘴里苦怎么办
揭秘哪种面食热量低,助你轻松减肥
玩法创新走到尽头?从休闲到SLG,全球手游正靠“讲故事”突围!
山药再次成为关注对象!医生劝告:吃山药时,一定要多注意这几点
一文读懂边缘计算和业务场景
骆驼祥子第七章简介
快看!用Deepseek的方式打开北方海南~
为什么需要 MapStruct
待机能耗成为“隐藏的浪费” 大城市一年待机能耗近2亿度电
公共营养师各种证全解:梳理证书以及公共营养师的颁发机构
扑尔敏不能和哪些药吃
一场隐晦交织的联姻臆想——透视中金公司与中国银河证券合并的种种迹象与深层逻辑