一、使用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);//循环获取文件内每一行字符,并存入strif(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.txtif((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;
}
运行结果: