今天在准备C语言复试,遇到了一个问题,描述如下:

用户在终端可以自定义初始化字符串密码,并且在登录时要进行验证是否正确,在实际编程的时候遇到如下两个问题:

  1. 实现用户想自定义多长的密码,就定义多长的密码,所以需要实现输入结束的判断。思路是:判断当用户输入的 password[i] = ‘\r’ 时,将其变成 ‘\0’ ,并 break 出 for 循环
if( password[i]=='\r' ){     //此 if 语句用于当用户输入回车时,密码输入结束 password[i] = '\0';break;
}
  1. 在终端用户输入密码时出错时,应允许用户退格删除重新输入,但实际上发现在终端输入状态敲击 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)问题相关推荐

  1. C语言-字符数组的定义-字符串的输入与输出

    定义字符数组: #define STR_LEN 80 char str[STR_LEN+1];//多留一个单位 定义字符数组的时候,要保证数组的长度要比字符串的长度多一个长度,因为C语言规定:字符串都 ...

  2. C语言 | 字符数组

    C语言字符数组的定义 字符数组是用来存放字符数据的数组,字符数组中的一个元素存放一个字符,定义字符数组的方法和定义数值型数组的方法类似. //例子:char character[10]; C语言字符数 ...

  3. C/C++ | C语言字符数组初始化,有些赋值方式千万注意

    一.字符数组的定义和初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. charstr[10]={'I','','a','m','','h','a','p','p','y'}; ...

  4. C语言 字符数组 和 字符串 详解

    C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ...

  5. C语言字符数组越界问题

    C语言字符数组踩坑 如果运行下面的代码会发生输出什么? #include<stdio.h> #include<string.h>/*** 输出结果* a1:wohello* a ...

  6. c语言字符数组赋值超过,C语言字符数组赋值

    C语言字符数组赋值教程 C语言字符数组赋值详解 语法 arr[index] = value; 参数 参数 描述 arr 数组名. index 需要赋值的下标索引. value 需要设置的值. 说明 给 ...

  7. python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...

    字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...

  8. 关于在字符数组中利用scanf函数输入空格等问题

    关于在字符数组中利用scanf函数输入空格等问题 控制串/数组 中的空白符使 scanf() 在输入流中跳过一个或多个空白行.空白符可以是空格(space).制表符(tab)和新行符(newline) ...

  9. C语言字符数组与字符串的使用及加结束符‘\0‘的问题

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

最新文章

  1. 【组队学习】【31期】LeetCode 刷题
  2. 如何删除未推送的git commit?
  3. JSP中实现网页访问统计的方法
  4. springboot:SpringBoot项目启动成功,但无法访问且提示404
  5. Linux常用命令——tar
  6. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
  7. 如何在python中安装matplotlib模块_Windows下为Python安装Matplotlib模块
  8. WCF trace、log
  9. [转载] 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
  10. alternatives命令用法
  11. hive动态分区shell_Hive/Shell 创建Hive 库 ,表脚本,Hive 动态增加分区脚本
  12. 我在阿里工作9年,今天我离职了
  13. 算法_EXCEL中 A表示第一列,B表示第二列...AA表示27列,AB表示28列,问随意一组字母是多少列
  14. Hive指定位置增加字段及解决columns have types incompatible with the existing columns in their respective positio
  15. 学习笔记——Exploiting Unintended Feature Leakage in Collaborative Learning(协作学习中的非预期特征泄露研究)
  16. 视频无损压缩转码免费软件 HandBrake【无损视频画质压缩】
  17. SQL Server 2000中的并行处理和执行计划中的位图运算符
  18. GitHub入门:github查看项目的历史版本,并实现版本的回滚(网页版)
  19. UserWarning: Glyph 20809 (\N{CJK UNIFIED IDEOGRAPH-5149}) missing from current font解决方法
  20. MUTAN:Multimodal Tucker Fusion For Visual Question Answering

热门文章

  1. 支付宝证书模式(转账给其他支付宝)
  2. SpringCloud SpringBoot uniapp vue b2b2c 微服务 多商家入驻直播带货商城 分销商城 秒杀 高并发电商之适配器模式
  3. 使用代理失败的解决方法
  4. SpringBoot继承第三方发送手机短信验证码
  5. Unreal Engine 4 —— 键位更换以及对应思考
  6. 廊坊知恩:抖音小店选品技巧
  7. Centos7中已有java1.8,再安装java1.4
  8. php怎么给table添加背景,怎样对table和td设置背景实现表格边框
  9. dota2从窗口模式切换到独占全屏模式后黑屏解决办法
  10. latex学习笔记——tikz画图 激活函数图像