1、使用fgets统计给定文件的行数。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
if(argc != 2)
{
printf("inout file error\n");
printf("usage:./a.out srcfile destfile\n");
return -1;
} FILE *fp=NULL;
//以只读形式再次打开文件
if((fp=fopen(argv[1],"r"))==NULL)//判断执行优先条件,需加(),以提高优先级
{
perror("fopen error");
return -1;
}
int line=0;
char buf[5]="";//字符串的搬运工
while(1)
{
char *ptr=fgets(buf ,sizeof(buf) ,fp);//从fp文件中读取字符串到buf中
if(ptr==NULL)
break;
for(int i=0;i<5;i++)
{
if(buf[i]=='\n')
{
line++;
break;
}
}
}
printf("共有%d行\n",line);
fclose(fp);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/d6f5b74b4d5e513197c09cd50a3dfe2a.png)
2、使用fputs和fgets完成两个文件的拷贝。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
//是否是外部传参
if(argc!=3)
{
printf("input error");
return -1;
}
FILE *fp1=NULL;
FILE *fp2=NULL;
if((fp1=fopen(argv[1],"r"))==NULL)
{
perror("fopen error");
return -1;
}
if((fp2=fopen(argv[2],"w"))==NULL)
{
perror("fopen error");
return -1;
}
char buf[5]="";
while(1)
{
char *ptr=fgets(buf,sizeof(buf),fp1);
if(ptr==NULL)
break;
fputs(ptr,fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/99c4d524f8911f0d6390a41465eb64de.png)
3、完成注册登录功能。做个小菜单,
功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中。
功能2是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功。
如果全部不匹配则提示登录失败
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
int menu=0;
while(1)
{
// system("clear"); //执行终端指令
printf("************xx登录界面*********************\n");
printf("**************1->注册**********************\n");
printf("**************2->登录**********************\n");
printf("**************3->退出**********************\n");
printf("请输入选项:");
scanf("%d",&menu);
getchar();
//菜单多分支选择
switch(menu)
{
case 1:
{
//注册功能
//存储账号
FILE *accountfp=NULL;
if((accountfp=fopen("./account.txt","a"))==NULL)
{
perror("fopen error");
return -1;
}
//定义要写入的用户名账号并存储
char account[10]="";
printf("please enter account:");
fscanf(stdin,"%s",account);
getchar();
fputs(account,accountfp);
fclose(accountfp);
//存储密码
FILE *passwdfp=NULL;
if((passwdfp=fopen("./passwd.txt","a"))==NULL)
{
perror("fopen error");
return -1;
}
//定义要写入的用户名密码并存储
char passwd[10]="";
printf("please enter passwd:");
fscanf(stdin,"%s",passwd);
getchar();
fputs(passwd,passwdfp);
fclose(passwdfp);
}break;
case 2:
{
//登录功能
char buf[10]="";
//验证账户
char account[10]="";
FILE *accountfp=NULL;
if((accountfp=fopen("./account.txt","r"))==NULL)
{
perror("fopen error");
return -1;
}
printf("please enter account:");
fscanf(stdin,"%s",account);
while(1)
{
//遍历文件中的账户比较
char *ptr=fgets(buf,sizeof(buf),accountfp);
if(strcmp(buf,account)==0)
{
printf("account true!\n");
break;
}
if(ptr==NULL)
{
printf("account error\n");
goto AERROR;
break;
}
}
fclose(accountfp);
//验证密码
char passwd[10]="";
FILE *passwdfp=NULL;
if((passwdfp=fopen("./passwd.txt","r"))==NULL)
{
perror("fopen error");
return -1;
}
printf("please enter passwd:");
fscanf(stdin,"%s",passwd);
while(1)
{
//遍历文件中的账户比较
char *ptr=fgets(buf,sizeof(buf),passwdfp);
if(strcmp(buf,passwd)==0)
{
printf("passwd true!\n");
printf("登录成功!\n");
break;
}
if(ptr==NULL)
{
printf("passwd error\n");
printf("登录失败\n");
break;
}
}
fclose(passwdfp);
}break;
case 0:goto END;
default:printf("error and please try again\n");
}
//提示输入任意键按回车结束
printf("请输入任意键按回车结束!!!\n");
while(getchar()!='\n');
}
AERROR:printf("登录失败\n");
END:
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/7ce25ee6d95b50f48cea55bb0ccee676.png)