用fgetc与fputc函数实现:
1.文件拷贝,例如将1.txt的内容拷贝到2.txt中
2.要求用fgetc计算一个文件有多少个字节
3.用fgetc计算一个文件有几行?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
FILE *p = fopen("./1.text","a+");
FILE *fp = fopen("./2.text","w+");
if(NULL == p || NULL == fp)
{
printf("文件打开失败\n");
return -1;
}
printf("文件打开成功\n");
char c=fgetc(p);
int count1=0,count2=0;
while(c!=EOF)
{
if(10 == c)
count2++;
fputc(c,fp);
count1++;
c=fgetc(p);
}
printf("文件字节数%d 文件有%d行\n",count1,count2);
if(fclose(p)<0 || fclose(fp)<0)
{
puts("文件关闭失败");
return -1;
}
puts("fclose function success");
return 0;
}
结果为:
实现登录功能。自定义一个usr.txt,手动输入账户密码,格式如下:账户 密码
例如: zhangsan 12345
lisi abcde
wangwu abc123
需求如下:
从终端获取账户密码,与文件中的账户密码比较
若终端输入的账户不存在,则输出账户不存在
若终端输入的账户存在,但是密码不正确,则输出密码错误
若账户密码均正确,则输出登录成功
附加题
实现注册功能,注册的账户密码存储在上一题的文件中。需求:不能重复注册。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 100
void menu_file(); //菜单
void login_file(); //登录
void register_file(FILE *file); //注册
int main(int argc, const char *argv[])
{
menu_file();
int n;
scanf("%d",&n);
FILE *p=fopen("usr.txt","a+");
switch (n)
{
case 2:login_file();break;
case 1:register_file(p);break;
}
fclose(p);
return 0;
}
void menu_file() //菜单
{
printf("请选择\n1.注册\t2.登录\n");
}
void login_file() //登录模块
{
char user[MAXSIZE];
char password[MAXSIZE];
puts("请输入账号:");
scanf("%s",user);
puts("请输入密码:");
scanf("%s",password);
char usr[MAXSIZE];
char pas[MAXSIZE];
FILE *p=fopen("usr.txt","r");
if (NULL == p)
{
printf("Failed to open file.\n");
return;
}
int count1=0,count3=0;
while(1)
{
if(fscanf(p,"%s %s",usr,pas)==EOF)
break;
if(strcmp(usr,user) == 0)
{
if(strcmp(pas,password) != 0)
count1++;
else
{
puts("登录成功");
return;
}
}
else
count3++;
}
fclose(p);
if(count1!=0)
puts("密码错误");
if(count3!=0&&count1==0)
puts("账号错误");
}
void register_file(FILE *file) //注册
{
char user[MAXSIZE];
char password[MAXSIZE];
err:
puts("请输入您的账号:");
scanf("%s",user);
while(1)
{
char usr[MAXSIZE];
char pas[MAXSIZE];
if(fscanf(file,"%s %s",usr,pas)==EOF)
break;
if(strcmp(usr,user)!=0)
{
puts("请输入您的密码:");
scanf("%s",password);
fprintf(file,"%s %s\n",user,password);
}
else
{
puts("该用户名已注册!请重新输入:");
goto err;
}
}
}