C(十一)scanf、getchar(第三弹)

news2024/10/3 20:38:16

问题引入:如何实现输入一串密码,如:“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
确认成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2186836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】进程管理:状态与优先级调度的深度分析

✨ 山海自有归期&#xff0c;风雨自有相逢 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1…

华为技术经理总结Java技术栈思维导图

最近帮在读大四的学生做了一个java项目&#xff0c;使用Spring bootVue3做了一个机器学习在线训练和服务的平台&#xff0c;发现他的Java技术栈并不全面&#xff0c;希望在下面分享一下Java技术栈&#xff0c;能够帮助到正在参加秋招或者是准备找工作的朋友们&#xff1a; 完整…

Vue.js 组件开发知识详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

为什么我可以做系统架构师?

人人都可以做产品经理&#xff0c;但是却没有人随随便便成为系统架构师&#xff0c;系统架构师为什么这么稀缺&#xff0c;因为系统架构师要求的能力是十分全面的&#xff0c;首先技术基本功要非常扎实&#xff0c;其次是你的统筹能力&#xff0c;一个项目交到你手上&#xff0…

软件管理【1.10】

软件管理【1.10】 13、软件管理13.1.包管理工具rpm13.2.yum和dnf13.2.1.配置yum源13.2.2.只下载安装包,不安装13.2.3.配置本地光盘ISO文件安装13.2.4.配置阿里云epel源13.2.5.base-for-centos7.repo13.2.6.base-for-rocky8.repo13.3.搭建私有yum仓库13.3.1.Apache实现网战功能…

力扣题解 1928

题目描述&#xff08;困难&#xff09; 规定时间内到达终点的最小费用 一个国家有 n 个城市&#xff0c;城市编号为 0 到 n - 1 &#xff0c;题目保证 所有城市 都由双向道路 连接在一起 。道路由二维整数数组 edges 表示&#xff0c;其中 edges[i] [xi, yi, timei] 表示城市…

提示词工程实践

本讲义主要以text2SQL为场景进行讲解&#xff0c;包括提示词的编写和闭源模型调用、本地开源模型部署调用以及基于开源模型的微调。 回顾下大模型学习思路&#xff1a; 1. 开发环境准备 1.1 代码 代码位于【算法管理】->【公共算法】->【prompts_engineering_04】&…

leetcode每日一题day17(24.9.27)——每种字符最少取k个

思路&#xff1a;看到题目就想到了搜索&#xff0c; 广搜&#xff1a;满足要求就往后搜&#xff0c;最后返回搜索队列达到过的最大深度&#xff0c; 深搜&#xff1a;一直往一边取&#xff0c;搜索完所有可能&#xff0c;并在此基础上进行剪枝&#xff0c;剪枝方案有如果某一分…

大师级GC调优:剖析高并发系统的垃圾回收优化实战

前期准备 大家开始前一定要对VisualVM、Jmeter这两款工具有所了解&#xff01; 1. 下载安装VisualVM&#xff0c;以便后续调优分析。JDK1.8及之前所在目录的bin目录下有自带的VisualVM&#xff0c;JDK1.8以后需要自行手动安装下载。 下载地址&#xff1a;https://visualvm.git…

模型的深度优化

文章目录 一、测试模型是否正确二、图形打印直观观察三、保存训练模型四、正确率&#xff08;仅使用于分类问题&#xff09; 一、测试模型是否正确 本文承接我的上一篇文章完整网络模型训练&#xff08;一&#xff09; 运用测试数据集&#xff08;test_dataloader&#xff09;…

第二十一章 (动态内存管理)

1. 为什么要有动态内存分配 2. malloc和free 3. calloc和realloc 4. 常⻅的动态内存的错误 5. 动态内存经典笔试题分析 6. 总结C/C中程序内存区域划分 1.为什么要有动态内存管理 我们目前已经掌握的内存开辟方式有 int main() {int num 0; //开辟4个字节int arr[10] …

全局安装cnpm并设置其使用淘宝镜像的仓库地址(地址最新版)

npm、cnpm和pnpm基本概念 首先介绍一下npm和cnpm是什么&#xff0c;顺便说一下pnpm。 npm npm&#xff08;Node Package Manager&#xff09;是Node.js的默认包管理器&#xff0c;用于安装、管理和分享JavaScript代码包。它是全球最大的开源库生态系统之一&#xff0c;提供了数…

centos环境安装JDK详细教程

centos环境安装JDK详细教程 一、前期准备二、JDK安装2.1 rpm方式安装JDK2.2 zip方式安装JDK2.3 yum方式安装JDK 本文主要说明CentOS下JDK的安装过程。JDK的安装有三种方式&#xff0c;用户可根据实际情况选择&#xff1a; 一、前期准备 查看服务器操作系统型号&#xff0c;执…

YOLOv7改进之主干DAMOYOLO结构,结合 CReToNeXt 结构,打造高性能检测器

一、DAMOYOLO理论部分 论文地址:2211.15444 (arxiv.org) 在本报告中,我们提出了一种快速准确的对象检测方法,称为 DAMO-YOLO,它实现了比最先进的 YOLO 系列更高的性能。DAMO-YOLO 是从 YOLO 扩展而来的,具有一些新技术,包括神经架构搜索 (NAS)、高效的重新参数化广义 …

【Linux】用虚拟机配置Ubuntu 24.04.1 LTS环境

目录 1.虚拟机安装Ubuntu系统 2.Ubuntu系统的网络配置 3.特别声明 首先我们先要下载VMware软件&#xff0c;大家自己去下啊&#xff01; 1.虚拟机安装Ubuntu系统 我们进去之后点击创建新的虚拟机&#xff0c;然后选择自定义 接着点下一步 再点下一步 进入这个界面之后&…

[C++]使用纯opencv部署yolov11目标检测onnx模型

yolov11官方框架&#xff1a;https://github.com/ultralytics/ultralytics 【算法介绍】 在C中使用纯OpenCV部署YOLOv11进行目标检测是一项具有挑战性的任务&#xff0c;因为YOLOv11通常是用PyTorch等深度学习框架实现的&#xff0c;而OpenCV本身并不直接支持加载和运行PyTor…

Python+Matplotlib展示单射、双射、满射

import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号def create_function_plot(ax, title, x, y, connections):ax.set_xlim(0, 5)ax.set_ylim(0, 5)ax.set_aspect…

UE4 材质学习笔记01(什么是着色器/PBR基础)

1.什么是shader 着色器是控制屏幕上每个像素颜色的代码&#xff0c;这些代码通常在图形处理器上运行。 现如今游戏引擎使用先进的基于物理的渲染和照明。而且照明模型模型大多数是被锁定的。 因此我们创建着色器可以控制颜色&#xff0c;法线&#xff0c;粗糙度&#xff0c;…

十一假期不停歇-学习ROS第二天

一、自动修改环境变量 source install/setup.bash 这句指令可不重复添加环境变量&#xff0c;直接运行就可以。 从左右图即可即可看出有所不同的。以后写完功能包发现不存在那就source一下就好了。 实际上它运行的是 python3.10那里的功能包与节点 我们在创建完功能包会出…

python-矩阵转置/将列表分割成块/和超过N的最短子数组

一&#xff1a;矩阵转置 题目描述 输入一个 n 行 m 列的矩阵 A&#xff0c;输出它的转置 AT。输入 第一行包含两个整数 n 和 m&#xff0c;表示矩阵 A 的行数和列数。1≤n≤100&#xff0c;1≤m≤100。接下来 n 行&#xff0c;每行 m 个整数&#xff0c;表示矩阵 A 的元素。相邻…