C语言怎么将用户账号密码写入文件实现登录注册功能?
创建储存用户账号密码的文件:
void Create_File() { FILE *fp; if ((fp = fopen("users.txt","rb"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("users.txt","wb+"))==NULL) { outtextxy(220, 200, "无法建立文件!"); } } }
关于文件读写:
r 只读 为输入打开一个文本文件(文件必须存在) w 只写 为输出打开一个文本文件(如没有文件,则新建) a 追加 向文本文件尾添加数据(如没有文件,则新建) rb 只读 为输入打开一个二进制文件 wb 只写 为输出打开一个二进制文件 ab 追加 向二进制文件尾添加数据 r+ 读写 为读写打开一个文本文件(文件必须已经存在) w+ 读写 为读写建立一个新的文本文件 a+ 读写 为读写打开一个文本文件(读写指针定位在最后) rb+ 读写 为读写打开一个二进制文件 wb+ 读写 为读写建立一个新的二进制文件 ab+ 读写 为读写打开一个二进制文件
创建结构体:
typedef struct The_users //typedef 可以定义结构体别名 { char id[11]; char pwd[20]; }users;
该结构体用于存储用户账号密码。
注册用户(账号密码)
void registers() //按结构体的大小,一次写入或者读入1个结构体大小 { users a,b;//结构体 The_users 重命名定义 FILE *fp; fp = fopen("users.txt","r"); fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 到b InputBox(a.id,11,"请输入账号"); while (1) { if (strcmp(a.id, b.id)) /*如果两串不相等*/ { if (!feof(fp)) /*如果未到文件尾*/ { fread(&b, sizeof(struct The_users), 1, fp); } else break; } else { outtextxy(220, 200, "此用户名已存在!"); fclose(fp); main(); } } InputBox(a.pwd,10,"请输入密码"); fp = fopen("users.txt","a"); fwrite(&a, sizeof(struct The_users), 1, fp); outtextxy(220, 200, "帐号注册成功!"); fclose(fp); main(); }
登录账号密码:
void Input_login() { users a,b;//定义结构体The_users别名 FILE *fp; fp = fopen("users.txt","r"); fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 写入b InputBox(a.id,11,"请输入账号"); outtextxy(295,270,a.id); while (1) { if (strcmp(a.id, b.id)==0) //如果有此用户名 { break; } else { if (!feof(fp)) //如果文件没有读完 { fread(&b, sizeof(struct The_users), 1, fp); } else { outtextxy(220, 200, "此用户名不存在!"); fclose(fp); main(); } } } InputBox(a.pwd,20,"请输入密码"); if (strcmp(a.pwd, b.pwd)==0) /*如果密码匹配*/ { fclose(fp); outtextxy(250, 200, "登录成功,欢迎使用!"); } else { outtextxy(220, 200, "密码不正确!"); main(); } }