C语言密码验证:3次机会解锁

用户登录密码验证

用字符数组实现密码验证;先提示用户输入密码,若错误,则允许重新输 入,单最多允许输入3次。若3次都输入错误,就结束程序;如果输入正确, 则显示"密码通过"。

#include <stdio.h>
#include <string.h>

int main()
{
char a4 = {"123"};
char n10;
int i = 0;
do {
printf("请输入密码:\n");
gets(n);

if (strcmp(n, a) == 0)
{
printf("密码通过\n");
break;
}
else
{
printf("密码错误!请重新输入\n");
printf("您还可以输入%d次",2-i);
}
i++;
} while (i<3);

return 0;
}

该程序预设了一个密码 "123"。运行后,它会提示用户输入密码。用户有最多三次尝试机会:

  • 如果输入的密码正确,程序会显示"密码通过"并立即结束。
  • 如果输入的密码错误,程序会提示错误,并告知用户还剩多少次尝试机会。
  • 如果三次都输入错误,循环结束,程序也随之结束。

#include <string.h>:引入字符串处理库。这是为了使用 **strcmp**函数来比较两个字符串是否相等。

一.主函数与变量定义

  • char a[4] = {"123"};:定义一个字符数组 a 并初始化为字符串 "123"。这个数组用来存储预设的正确密码 。数组大小为4,因为字符串 "123" 在内存中实际存储为 '1', '2', '3', '\0' (字符串结束符),共4个字节。
  • char n[10];:定义一个字符数组 n,用来存储用户输入的密码 。大小为10,意味着最多可以接收9个字符的密码(留一个位置给结束符 '\0')。
  • int i = 0;:定义一个整型变量 i 并初始化为0。它在这里充当计数器,记录用户已经尝试输入密码的次数。

二.密码验证循环

这里使用了 do-while 循环。它的特点是先执行一次循环体内的代码,然后再判断条件。这保证了用户至少会被提示输入一次密码。循环会一直执行,直到条件i<3不再满足(即 i 的值变为3)为止。

三.循环体内部逻辑

  • printf("请输入密码:\n");:在屏幕上打印提示信息,告诉用户该做什么。
  • gets(n);:从标准输入(键盘)读取一行文本,并将其存储到字符数组 n 中。

重要安全提示
gets() 函数非常不安全,因为它不检查输入的长度。如果用户输入的字符超过数组 n 的大小(10个字节),就会发生缓冲区溢出 ,可能覆盖掉程序中其他重要数据,导致程序崩溃或产生安全漏洞。在实际编程中,应始终使用 fgets(n, sizeof(n), stdin); 来替代 gets()。

  • strcmp(n, a):这是 **string.h**库中的函数,用于比较字符串 n (用户输入) 和 a (正确密码)。
    • 如果两个字符串完全相同 ,函数返回 0。
    • 如果不同,则返回一个非零值。
  • if (strcmp(n, a) == 0):判断密码是否正确。
  • printf("密码通过\n");:如果密码正确,打印成功信息。
  • break;:这是一个关键语句。它会立即跳出并终止 当前所在的整个 **do-while**循环。一旦密码正确,就不再需要后续的尝试了。
  • else:如果 if 的条件不满足(即密码错误),则执行这里的代码。
  • printf("密码错误!请重新输入\n");:提示用户密码输入错误。
  • printf("您还可以输入%d次",2-i);:动态计算并显示剩余的尝试次数。
    • 当**i=0** (第1次尝试),显示**2-0=2** 次。
    • 当 i=1(第2次尝试),显示 **2-1=1**次。
    • 当**i=2**(第3次尝试),显示 **2-2=0**次。
  • i++;:在一次尝试(无论对错)结束后,将计数器 i 的值加1。然后程序会回到 while(i<3); 判断是否继续下一轮循环。
相关推荐
m0_639906947 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
ZhengEnCi8 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David9 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi9 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6189 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang10 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
2601_9707038311 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你021411 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi12 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Zwawa12 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式