实现登录功能。自定义一个usr.txt,手动输入账户密码,格式如下:账户 密码
例如: zhangsan 12345
lisi abcde
wangwu abc123
需求如下:
a.从终端获取账户密码,与文件中的账户密码比较
b.若终端输入的账户不存在,则输出账户不存在
c.若终端输入的账户存在,但是密码不正确,则输出密码错误
d.若账户密码均正确,则输出登录成功
#include
#include
#include
int main(int argc, const char *argv[])
{
char f_usr[20]="";
char f_usr_m[20]="";
printf("enter name:");
scanf("%s",f_usr);
getchar();
printf("enter m:");
scanf("%s",f_usr_m);
getchar();
FILE* fp=fopen("usr.txt","r");
if(NULL==fp)
{
perror("fopen");
return -1;
}
char usr[20]="";
char mima[20]="";
while(1)
{
int eof=fscanf(fp,"%s%s",usr,mima);
if(EOF==eof)
{
printf("账户不存在\n");
break;
}
if(strcmp(usr,f_usr)!=0)
{
continue;
}
else if(strcmp(mima,f_usr_m)!=0)
{
printf("密码错误\n");
break;
}
else
{
printf("登陆成功\n");
break;
}
}
fclose(fp)
if(fclose(fp)<0)
return -1;
return 0;
}
实现注册功能,注册的账户密码存储在上一题的文件中。需求:不能重复注册。
#include
#include
#include
int main(int argc, const char *argv[])
{
FILE* fp=fopen("usr.txt","r");
if(NULL==fp)
{
perror("fopen");
return -1;
}
char name[20]="";
char mima[20]="";
printf("输入注册账户名:");
scanf("%s",name);
printf("输入注册账户名的密码:");
scanf("%s",mima);
while(1)
{
char name1[20]="";
char mima1[20]="";
int eof=fscanf(fp,"%s%s",name1,mima1);
if(strcmp(name1,name)==0)
{
printf("账户存在\n");
return -1;
}
if(EOF==eof)
break;
}
fp=fopen("usr.txt","a");
fprintf(fp,"%s %s",name,mima);
fclose(fp)
if(fclose(fp)<0)
return -1;
return 0;
}
题目三
用fgetc与fputc函数实现:运算符优先级: =号优先级最低。
1.文件拷贝,例如将1.txt的内容拷贝到2.txt中
#include
#include
#include
int main(int argc, const char *argv[])
{
FILE* fp=fopen("fscanf.txt","r");
FILE* pt=fopen("1.txt","w+");
while(1)
{
int c=0;
c=fgetc(fp);
if(EOF==c)
break;
fputc(c,pt);
}
fclose(fp)
if(fclose(fp)<0&&fclose(pt)<0)
return -1;
return 0;
}
2.要求用fgetc计算一个文件有多少个字节
#include
#include
#include
int main(int argc, const char *argv[])
{
FILE* fp=fopen("fscanf.txt","r");
if(NULL==fp)
{
perror("fopen");
return -1;
}
int count=0;
while(1)
{
int c=fgetc(fp);
if(EOF==c)
break;
count++;
}
printf("fscanf.txt的字节数为%d\n",count);
fclose(fp)
if(fclose(fp)<0)
return -1;
return 0;
}
3.用fgetc计算一个文件有几行?
#include
#include
#include
int main(int argc, const char *argv[])
{
FILE* fp=fopen("fscanf.txt","r");
if(NULL==fp)
{
perror("fopen");
return -1;
}
int count=0;
while(1)
{
int c=fgetc(fp);
if(EOF==c)
break;
if(c==10)
count++;
}
printf("fscanf.txt的行数为%d\n",count);
fclose(fp)
if(fclose(fp)<0)
return -1;
return 0;
}
思维导图