1.touch有一个usr.txt的文件,其中存储着用户的账户和密码,格式如下
a . zhangsan aaaa
b . lisi bbbbb
c.空格前面是账户,空格后面是密码,一行一个2.要求如下:
a.从终端获取一个账户名和密码
b.判断是否能够登录成功
c.若账户不存在: 则提示账户不存在
d.若账户存在,密码不匹配: 则提示密码错误
e。账户密码均存在:则显示登录成功。
1. 注册功能
#include"head.h"
// vsp xxx
int main(int argc, const char *argv[])
{
use user[20];
int len=2,i;
FILE *p=fopen("usr.txt","r+");
if(NULL==p)
{
printf("失败\n");
}
else
printf("成功\n");
for(i=0;i<len;i++)
{
fscanf(p,"%s %s",user[i].name,user[i].psw);
}
//显示
output(user,len);
//用户登录
denglu(user,len);
//注册
zhuce(user,len,p);
zhuce(user,len,p);
zhuce(user,len,p);
fclose(p);
}
#ifndef __head_h__
#define __head_h__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char name[20];
char psw[20];
}use;
void output(use user[],int len);
void denglu(use user[],int len);
void zhuce(use user[],int len,FILE *p);
#endif
#include"head.h"
void output(use user[],int len)
{
printf("目前已有:\n");
for(int i=0;i<len;i++)
{
printf("名字%s 密码%s\n",user[i].name,user[i].psw);
}
}
void denglu(use user[],int len)
{
char name[20]="",psw[20]="";
printf("输入账户名字\n");
scanf("%s",name);
for(int i=0;i<len;i++)
{
if(strcmp(name,user[i].name)==0)
{
printf("输入密码\n");
scanf("%s",psw);
if(strcmp(psw,user[i].psw)==0)
{
printf("登录成功\n");
break;
}
else
{
printf("密码错误\n");
break;
}
}
if(i==len-1)
{
printf("用名不存在");
}
}
}
void zhuce(use user[],int len,FILE *p)
{
int i;
char name[20]="",psw[20]="";
printf("输入注册用户名\n");
scanf("%s",name);
for(i=0;i<len;i++)
{
if(strcmp(user[i].name,name)==0)
{
printf("用户名已存在\n");
break;
}
}
if(i==len)
{
user[i].name==name;
fseek(p,0,2);
printf("输入密码\n");
scanf("%s",psw);
fprintf(p,"%s %s\n",name,psw);
len++;
}
}
2. 用fgetc实现一个文件有几行,文件大小
#include"head.h"
// vsp xxx
int main(int argc, const char *argv[])
{
int count=0;
FILE *fp=fopen("usr.txt","r+");
while(!feof(fp))
{
if(fgetc(fp)=='\n')
{
count++;
}
}
printf("有%d行",count);
fclose(fp);
fp=NULL;
}