一、使用fgets统计给定文件的行数
代码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int main(int argc, const char *argv[])
{
FILE *fp=NULL;
if((fp=fopen("./1.txt","r"))==NULL)//只读形式打开1.txt文件
{
perror("fopen error");
return -1;
}
char str[32]="";//定义字符数组用于存储文件内每一行字符
int line=0;//记录行数
while(1)
{
char *p=fgets(str,sizeof(str),fp);//循环获取文件内每一行字符,并存入str
if(NULL==p)//如果返回NULL 则结束循环;
break;
printf("%s\n",str);
int i=strlen(str)-1;//计算每次获取的字符串中 \0前一个字符的下标;
if(str[i]=='\n')//如果对应下标的元素是\n 行数+1;
line++;
}
printf("1.txt line=%d\n",line);//循环结束输出行数;
return 0;
}
运行:
二、 使用fputs和fgets完成两个文件的拷贝。
代码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int main(int argc, const char *argv[])
{
FILE *srcfp=NULL; //定义两个文件指针;
FILE *destfp=NULL;
//只读形式打开1.txt;只写模式打开2.txt
if((srcfp=fopen("./1.txt","r"))==NULL || (destfp=fopen("./2.txt","w"))==NULL)
{
perror("fopen error");
return -1;
}
char str[32]="";//存储每次赋值的一行字符串;
while(1)
{
char *p=fgets(str,sizeof(str),srcfp);//将1.txt中每行字符存入str;
if(p==NULL)//如果返回NULL;则结束循环
{
break;
}
fputs(str,destfp);//将每行获取的字符输入到文件2.txt中;
}
return 0;
}
运行:
三、完成注册登录功能
做个小菜单,功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中
功能2是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配则提示登录失败。
代码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int main(int argc, const char *argv[])
{
int menu=0;
FILE *fp=NULL;
char str[32]="";
while(1)
{
system("clear");//执行终端指令
printf("\t\t-----登录系统------\n");
printf("\t\t------1.注册-------\n");
printf("\t\t------2.登录-------\n");
printf("\t\t------3.退出-------\n");
printf("pelese enter option:");
scanf("%d",&menu);
getchar();
//对menu进行多分支选择
switch(menu)
{
case 1:
{
if((fp=fopen("./3.txt","a"))==NULL)
{
perror("fopen eerror");
return -1;
}
printf("请设置注册账号:");
scanf(" %s",str);
fprintf(fp,"%s\n",str);//加换行存入
printf("请设置注册密码:");
scanf(" %s",str);
fprintf(fp,"%s\n",str);
fclose(fp);
}break;
case 2:
{
if((fp=fopen("./3.txt","r"))==NULL)
{
perror("fopen eerror");
return -1;
}
char input_str[16]="";
AGAINID:
printf("请输入账号:");
scanf(" %s",input_str);
int flag=0;
while(1)
{
char *p=fgets(str,sizeof(str),fp);
if(NULL==p)
break;
str[strlen(str)-1]='\0';//结尾添加\0作为字符串标志
int sub=strcmp(str,input_str); //比较两个字符串
if(!sub)
{
flag++;
printf("账号存在\n");
break;
}
}
if(0==flag)
{
printf("输入的账号不存在\n");
goto AGAINID;
}
AGAINPW:
printf("请输入密码:");
char input_pw[16]="";
scanf(" %s",input_pw);
while(1)
{
char *p=fgets(str,sizeof(str),fp);
if(NULL==p)
break;
str[strlen(str)-1]='\0';
int sub=strcmp(str,input_pw);
if(!sub)
{
flag++;
printf("登陆成功\n");
break;
}
}
if(0==flag)
{
printf("输入的密码不正确\n");
goto AGAINPW;
}
fclose(fp);
}break;
case 3:goto END;
default:
printf("选择的功能有误,请重新输入\n");
}
printf("请输入任意按键回车结束\n");
while(getchar()!='\n');
}
END:
return 0;
}
运行结果: