首页 > 其他分享 >C语言学习记录4

C语言学习记录4

时间:2022-10-05 21:31:06浏览次数:55  
标签:ch 记录 确认 C语言 学习 includeint printf password getchar

#每日落日分享#

C语言学习记录4_键盘输入

今天浅显的学习了'getchar',现在记录下来。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int ch = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N):>");
ch = getchar();
if (ch == 'Y')
printf("确认成功");
else
printf("放弃确认");
return 0;
}

结果如下:

C语言学习记录4_键盘输入_02

很显然,跳过了确认密码,并没有达成我想要的目的。

开始寻找问题所在,通过询问,我了解到键盘输入“123456”然后回车会在输入缓冲区形成“123456\n”,经过第一次读取,输入缓冲区只剩下‘\n’,显然‘getchar’获取了‘\n’。

#include<stdio.h>
int main()
{
char x = '\n';
printf("%d\n", x);
return 0;
}

通过编译可知结果为“10”,对照ASCII码值可知为非Y,所以就会打印“放弃确认”。

要想解决这个问题就要把缓冲区的字符全都提取干净,如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int ch = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
getchar();
printf("请确认密码(Y/N)");
ch = getchar();

if (ch == 'Y')
printf("确认成功");
else
printf("放弃确认");
return 0;
}

结果如下:

C语言学习记录4_#define_03

但此时还有一个问题:

C语言学习记录4_#define_04

可以看到,一旦加了空格就回到解放前。原因还是因为缓冲区没有清理干净。

#include<stdio.h>
int main()
{
int ch = 0;
ch = getchar();
putchar(ch);

return 0;
}

在这里我键盘输入了多个字符,但最终显示的永远为最前面的一个字符,所以

’getchar‘是一个一个的获取字符的。(推测的,本人完全是小白)

想要确保把缓冲区清理干净的话可以弄个循环:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int ch = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
while (getchar() != '\n')
{
;
}
printf("请确认密码(Y/N)");
ch = getchar();
if (ch == 'Y')
printf("确认成功");
else
printf("放弃确认");
return 0;
}


现在就欧了!

C语言学习记录4_#define_05











标签:ch,记录,确认,C语言,学习,includeint,printf,password,getchar
From: https://blog.51cto.com/u_15815053/5732940

相关文章

  • FPGA学习--VHDL基本结构
    一个完整的VHDL程序,或者说设计实体,通常要求最低能为VHDL综合器所支持,并能作为一个独立的设计单元,即元件的形式而存在的VHDL程序。在VHDL程序中,通常包含实体(ENTITY)、结构体......
  • 学习记录15集合
    集合什么是集合?同时存储多个元素,需要怎么做?以前学习过数组,可数组的使用是有弊端的——数组的长度是固定的集合与数组一样,都可以被看作是一个容器。在没有添加元素的情......
  • 深度学习常用数据集介绍与下载(附网盘链接)
    摘要:这篇博文总结了博主收集的深度学习常用的数据集,包含常用的分类、目标检测及人脸识别任务,对每个数据集给出了简要介绍、官网下载网站以及公众号获取的关键字。因为有的......
  • 学习+科研+做项目 PyTorch最详细视频讲解
    ​​PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】​​​​《PyTorch深度学习实践》完结合集​​​​莫烦Python-PyTorch神经网络​​​​Pytorch入门到精通全教程......
  • 面试+学习+做项目 OpenVINO最全视频讲解
    ​​基于Python的OpenVINO开发实战教程​​​​树莓派4B+OpenVINO快速实现人脸识别​​​​OpenVINO™_使用指南​​更多资料请关注:计算机视觉与图形学实战​​基于......
  • 面试+学习+做项目+最全Java视频讲解
    关注公众号:计算机视觉与图形学实战​​Java零基础教程视频(适合Java0基础,Java初学入门)​​​​尚硅谷Java零基础入门教程(含百道Java真题,2万多行Java代码实战)​​​​黑马程......
  • 【机器学习中的矩阵求导】(八)标量函数f(x)的雅克比矩阵(迹函数)
    学习总结交换律:,需要满足、同维度行列式微分:文章目录​​学习总结​​​​一、标量函数的雅克比函数​​​​二、关于迹函数的性质​​​​2.1常用性质​​​​2.2迹函数的......
  • 【THM】Metasploit Exploitation(Metasploit利用)-学习
    简介在本文中,我们将学习如何使用Metasploit进行漏洞扫描和漏洞利用。我们还将介绍数据库特性是如何使管理更广泛的渗透测试项目变得更加容易的。最后,我们将研究如何使......
  • 【学习笔记】JDBC
    JDBC 什么是数据库驱动数据库驱动就是连接应用程序与数据库的如果没有数据库驱动,应用程序是无法直接到达数据库的,数据库驱动是由数据库厂商来做的 什么是JDBCSU......
  • 并发学习记录16:任务调度线程池
    在任务调度池功能加入之前,可以使用java.util.Timer来实现定时功能,Timer的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能......