C语言字符数组匹配验证以及终端输入退格(backspace)问题
今天在准备C语言复试,遇到了一个问题,描述如下:
用户在终端可以自定义初始化字符串密码,并且在登录时要进行验证是否正确,在实际编程的时候遇到如下两个问题:
- 实现用户想自定义多长的密码,就定义多长的密码,所以需要实现输入结束的判断。思路是:判断当用户输入的 password[i] = ‘\r’ 时,将其变成 ‘\0’ ,并 break 出 for 循环
if( password[i]=='\r' ){ //此 if 语句用于当用户输入回车时,密码输入结束 password[i] = '\0';break;
}
- 在终端用户输入密码时出错时,应允许用户退格删除重新输入,但实际上发现在终端输入状态敲击 backspace 键只会被当做字符输入进字符串。思路是:判断用户输入的字符 ASCII 码值是否为 8,若是,则执行如下代码( i==0 判断用于,当未输入时,退格键无效)
if( password[i]==8 ){ //此 if 语句用于当用户输入退格时,删掉一个字符 if( i==0 )continue;putchar('\b');putchar(' ');putchar('\b');i = i-2;
}
所以完整代码为:
#include<stdio.h>
#include<string.h>
#include<conio.h>#define NUM 10int main()
{int i=0;char password[NUM],input[NUM]; //定义两个数组,password存放初始化密码,input登录密码 printf("Please input the password:"); //下面 for 循环用于用户初始化密码 for(i=0;i<NUM;i++){password[i] = getch(); if( password[i]=='\r' ){ //此 if 语句用于当用户输入回车时,密码输入结束 password[i] = '\0';break;}else if( password[i]==8 ){ //此 if 语句用于当用户输入退格时,删掉一个字符 if( i==0 )continue;putchar('\b');putchar(' ');putchar('\b');i = i-2;}elseputchar(password[i]); //明文显示用户初始化的密码 }printf("\n\nsign in:"); //用户登录时,输入密码进行校验,判断是否与初始化密码 password一致 for(i=0;i<NUM;i++){input[i] = getch();if( input[i]=='\r' ){ //此 if 语句用于当用户输入回车时,密码输入结束input[i] = '\0';break;}else if( input[i]==8 ){ //此 if 语句用于当用户输入退格时,删掉一个字符if( i==0 )continue;putchar('\b');putchar(' ');putchar('\b');i = i-2;}elseputchar('*'); //将用户输入的密码显示成一串***,以保证安全性 }//此注释部分用于测试,当运行出错时,将两个字符数组分别输出以寻找不匹配的地方
/* printf("\n");printf("input is:")for(i = 0;i < NUM;i++){putchar(input[i]);} printf("\n");printf("password is:");for(i = 0;i < NUM;i++){putchar(password[i]);} */if( strcmp(password,input)==0 ) //判断 password 与 input 是否相等 printf("\nthe password is right !\n");elseprintf("\nthe password is wrong !\n");return 0;
}
C语言字符数组匹配验证以及终端输入退格(backspace)问题相关推荐
- C语言-字符数组的定义-字符串的输入与输出
定义字符数组: #define STR_LEN 80 char str[STR_LEN+1];//多留一个单位 定义字符数组的时候,要保证数组的长度要比字符串的长度多一个长度,因为C语言规定:字符串都 ...
- C语言 | 字符数组
C语言字符数组的定义 字符数组是用来存放字符数据的数组,字符数组中的一个元素存放一个字符,定义字符数组的方法和定义数值型数组的方法类似. //例子:char character[10]; C语言字符数 ...
- C/C++ | C语言字符数组初始化,有些赋值方式千万注意
一.字符数组的定义和初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. charstr[10]={'I','','a','m','','h','a','p','p','y'}; ...
- C语言 字符数组 和 字符串 详解
C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ...
- C语言字符数组越界问题
C语言字符数组踩坑 如果运行下面的代码会发生输出什么? #include<stdio.h> #include<string.h>/*** 输出结果* a1:wohello* a ...
- c语言字符数组赋值超过,C语言字符数组赋值
C语言字符数组赋值教程 C语言字符数组赋值详解 语法 arr[index] = value; 参数 参数 描述 arr 数组名. index 需要赋值的下标索引. value 需要设置的值. 说明 给 ...
- python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...
字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...
- 关于在字符数组中利用scanf函数输入空格等问题
关于在字符数组中利用scanf函数输入空格等问题 控制串/数组 中的空白符使 scanf() 在输入流中跳过一个或多个空白行.空白符可以是空格(space).制表符(tab)和新行符(newline) ...
- C语言字符数组与字符串的使用及加结束符‘\0‘的问题
1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...
最新文章
- 【组队学习】【31期】LeetCode 刷题
- 如何删除未推送的git commit?
- JSP中实现网页访问统计的方法
- springboot:SpringBoot项目启动成功,但无法访问且提示404
- Linux常用命令——tar
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
- 如何在python中安装matplotlib模块_Windows下为Python安装Matplotlib模块
- WCF trace、log
- [转载] 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
- alternatives命令用法
- hive动态分区shell_Hive/Shell 创建Hive 库 ,表脚本,Hive 动态增加分区脚本
- 我在阿里工作9年,今天我离职了
- 算法_EXCEL中 A表示第一列,B表示第二列...AA表示27列,AB表示28列,问随意一组字母是多少列
- Hive指定位置增加字段及解决columns have types incompatible with the existing columns in their respective positio
- 学习笔记——Exploiting Unintended Feature Leakage in Collaborative Learning(协作学习中的非预期特征泄露研究)
- 视频无损压缩转码免费软件 HandBrake【无损视频画质压缩】
- SQL Server 2000中的并行处理和执行计划中的位图运算符
- GitHub入门:github查看项目的历史版本,并实现版本的回滚(网页版)
- UserWarning: Glyph 20809 (\N{CJK UNIFIED IDEOGRAPH-5149}) missing from current font解决方法
- MUTAN:Multimodal Tucker Fusion For Visual Question Answering
热门文章
- 支付宝证书模式(转账给其他支付宝)
- SpringCloud SpringBoot uniapp vue b2b2c 微服务 多商家入驻直播带货商城 分销商城 秒杀 高并发电商之适配器模式
- 使用代理失败的解决方法
- SpringBoot继承第三方发送手机短信验证码
- Unreal Engine 4 —— 键位更换以及对应思考
- 廊坊知恩:抖音小店选品技巧
- Centos7中已有java1.8,再安装java1.4
- php怎么给table添加背景,怎样对table和td设置背景实现表格边框
- dota2从窗口模式切换到独占全屏模式后黑屏解决办法
- latex学习笔记——tikz画图 激活函数图像