【IO进程线程】使用标准IO函数完成用户的登录和注册

 1 实现登录功能

自定义一个usr.txt,先手动输入其账户密码。

格式:账户 密码

例:

zhangsan 12345

lisi abcde

wangwu abc123

需求如下:

1. 从终端获取账户密码,与文件中的账户密码比较;

2. 若终端输入的账户不存在,则输出账户不存在;

3. 若终端输入的账户存在,但是密码不正确,则输出密码错误;

4. 若账户密码均正确,则输出登录成功。

方法一

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{char get_usrname[20]="";char get_usrpass[20]="";printf("请输入账号:");scanf("%s",get_usrname);printf("请输入密码:");scanf("%s",get_usrpass);FILE* fp=fopen("./usr.txt","r");if(NULL == fopen){perror("fopen");return -1;}char file_name[20];char file_pass[20];int flag=0;while(1){if(fscanf(fp,"%s %s",file_name,file_pass)==EOF)//从终端读取账号密码{flag=1;break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)!=0){printf("密码错误!\n");break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)==0){printf("登录成功!\n");break;}}if(flag==1){printf("该用户不存在!\n");}fclose(fp);
return 0;
}

方法二

#include <stdio.h>
#include <unistd.h>
#include <string.h>int main(int argc, const char *argv[])                                                   
{char get_name[20] = "", get_passwd[20] = "";char file_name[20] = "", file_passwd[20] = "";//从终端获取账户密码printf("请输入账户和密码>>> ");scanf("%s %s", get_name, get_passwd);//以读的方式打开文件FILE* fp = fopen("./usr.txt", "r");if(NULL == fp){perror("fopen");return -1;}//循环读取文件的一行:账户  密码while(1){//将字符串清空bzero(file_name, sizeof(file_name));bzero(file_passwd, sizeof(file_passwd));if(fscanf(fp, "%s %s", file_name, file_passwd) == EOF){printf("%s 用户不存在\n", get_name);break;}//  printf("%s %s\n", file_name, file_passwd);//与终端获取到的账户密码比较if(strcmp(file_name, get_name) != 0)    //若账户名不相同,则去获取下一个账户密码continue;if(strcmp(file_passwd, get_passwd) != 0){printf("%s 密码错误\n", get_name);}else{printf("%s 用户登录成功\n", get_name);}break;      //若账户相同,则不需要继续往后比较其他用户了}//关闭文件fclose(fp);return 0;
}

2 实现注册功能

注册的账户密码存储在上一题的文件中。

需求:不能重复注册。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int log_on();
int regist();
int main(int argc, const char *argv[])
{/*一、实现登录功能。自定义一个usr.txt,手动输入账户密码,格式如下:账户 密码例如:  zhangsan  12345lisi  abcdewangwu abc123需求如下:1.从终端获取账户密码,与文件中的账户密码比较2.若终端输入的账户不存在,则输出账户不存在3.若终端输入的账户存在,但是密码不正确,则输出密码错误4.若账户密码均正确,则输出登录成功二、附加题实现注册功能,注册的账户密码存储在上一题的文件中。需求:不能重复注册。*/int choose;printf("请选择是注册用户(1)还是登录用户(2):");scanf("%d",&choose);if(choose!=1&&choose!=2){printf("选择失败!\n");return 0;}//注册else if(choose==1){regist();}//登录else{log_on();}return 0;
}
int log_on()
{char get_usrname[20]="";char get_usrpass[20]="";printf("请输入账号:");scanf("%s",get_usrname);printf("请输入密码:");scanf("%s",get_usrpass);FILE* fp=fopen("./usr.txt","r");if(NULL == fopen){perror("fopen");return -1;}char file_name[20];char file_pass[20];int flag=0;while(1){if(fscanf(fp,"%s %s",file_name,file_pass)==EOF)//从终端读取账号密码{flag=1;break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)!=0){printf("密码错误!\n");int b=0;printf("请问是否要再次登录(0/1):");scanf("%d",&b);if(b==1){log_on();}break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)==0){printf("登录成功!\n");break;}}if(flag==1){printf("该用户不存在!\n");int b=0;printf("请选择是否要注册(0/1):");scanf("%d",&b);if(b==1){regist();}}fclose(fp);return 0;
}int regist()
{char get_usrname[20];char get_usrpass[20];printf("请输入注册账户:");scanf("%s",get_usrname);printf("请输入注册密码:");scanf("%s",get_usrpass);FILE* fp=fopen("./usr.txt","r");char file_name[20];char file_pass[20];int flag=0;while(1){if(fscanf(fp,"%s %s",file_name,file_pass)==EOF){flag=1;break;}if(strcmp(get_usrname,file_name)==0){printf("用户已存在!\n");int b=0;printf("请问是否直接选择登录(0/1):");scanf("%d",&b);if(b==1){log_on();}break;}}if(flag==1){fclose(fp);fp=fopen("./usr.txt","a+");fprintf(fp,"%s %s",get_usrname,get_usrpass);fputc(10,fp);printf("注册成功!\n");}fclose(fp);}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把Android手机变成电脑摄像头

一、使用 DroidCam 使用 DroidCam&#xff0c;你可以将手机作为电脑摄像头和麦克风。一则省钱&#xff0c;二则可以在紧急情况下使用&#xff0c;比如要在电脑端参加一个紧急会议&#xff0c;但电脑却没有摄像头和麦克风。 DroidCam 的安卓端分为免费的 DroidCam 版和收费的 …

设计模式之抽象工厂

文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了…

iOS 分别对一张图的局部进行磨砂,拼接起来不能贴合

效果图 需求&#xff0c;由于视图层级的原因&#xff0c;需要对图片分开进行磨砂&#xff0c; 然后组合在一起 如图&#xff0c;上下两部分&#xff0c;上下两个UIImageVIew大小相同&#xff0c;都是和图片同样的大小&#xff0c;只是上面的UIimageVIew 只展示上半部份 &#…

SQL 错误 [22007]: ERROR: invalid input syntax for type date: ““

0. 背景 PG数据库一张表有这样一个varchar类型的字段end_date,存储的值是格式化后的年月日日期如 2024-08-10 现在我需要根据当前日期与end_date的差值作为where条件过滤,我的写法 select …… from my_table_name where current_date - cast (end_date as date) >100报错…

【深度学习】实验02 鸢尾花数据集分析

文章目录 鸢尾花数据集分析决策树K-means 鸢尾花数据集分析 决策树 # 导入机器学习相关库 from sklearn import datasets from sklearn import treeimport matplotlib.pyplot as plt import numpy as np# Iris数据集是常用的分类实验数据集&#xff0c; # 由Fisher, 1936收集…

2023年高教社杯 国赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

全流程R语言Meta分析核心技术

​Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面…

Verilog 实现超声波测距

Verilog 实现超声波测距 教学视频&#xff1a; https://www.bilibili.com/video/BV1Ve411x75W?p33&spm_id_frompageDriver&vd_source19ae31dff4056e52d2729a4ca212602b 超声波测距原理 参考资料&#xff1a;STM32的超声波测距程序_超声波测距stm32程序_VaderZhang的…

基于Java+SpringBoot+Vue前后端分离在线考试与学习交流网页平台设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

常见前端面试之VUE面试题汇总七

20. 对 vue 设计原则的理解 1.渐进式 JavaScript 框架&#xff1a;与其它大型框架不同的是&#xff0c;Vue 被设计 为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上 手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的…

扫雷小游戏

目录 一.扫雷小游戏 二.游戏主体一览 ​编辑 三.模块化设计扫雷游戏 3.1打印欢迎菜单 3.2创建两个二维数组 3.3棋盘稍加修改 3.4布置雷 3.5排查雷 四.游戏总体代码 4.1game.h头文件 4.2game.c函数实现源文件 4.3游戏main函数主体 五.游戏效果图 一.扫雷小游戏 这是…

Verilog 实现状态机自动售卖机

Verilog 实现状态机自动售卖机 教学视频&#xff1a;https://www.bilibili.com/video/BV1Ve411x75W?p33&spm_id_frompageDriver&vd_source19ae31dff4056e52d2729a4ca212602b 功能需求 使用1元、2元、5元面值的纸币进行支付&#xff0c;获取6元的物品&#xff0c;不设…