1> 使用fgets统计给定文件的行数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{//判断外部输入文件名是否规范if(argc!=2){printf("input file error\n");printf("usage:./a.out filename\n");return -1;}//定义文件指针,以只读的形式打开传入的文件FILE *fp=NULL;if((fp=fopen(argv[1],"r"))==NULL){perror("fopen error");return -1;}//统计行号int count=0;//计数器char str[100];//获取文件的字符串的搬运工while(1){char *ptr=fgets(str,sizeof(str),fp);//从fp文件中读取字符串if(ptr==NULL){break;}count++;}printf("文件的行号为%d\n",count);fclose(fp);return 0;
}
现象展示:
2> 使用fputs和fgets完成两个文件的拷贝
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{ //判断外部输入文件名是否规范if(argc!=3){printf("input file error\n");printf("usage:./a.out filename\n");return -1;}FILE *fp=NULL;//定义被获取文件内容的文件指针//以只读的形式打开文件fpif((fp=fopen(argv[1],"r"))==NULL){perror("fopen error");return -1;}FILE *fq=NULL;//定义被输入文件内容的文件指针//以只写的形式打开文件fqif((fq=fopen(argv[2],"w"))==NULL){perror("fopen error");return -1;} char str[4];//获取文件的字符串的搬运工,每四个字符为一组截取while(1){char *ptr=fgets(str,sizeof(str),fp);//从fp文件中读取字符串if(ptr==NULL){break;}fputs(ptr,fq);}fclose(fp);fclose(fq);//以只读的形式打开文件fqif((fq=fopen(argv[2],"r"))==NULL){perror("fopen error");return -1;} while(1){char *ptr = fgets(str, sizeof(str), fq); //从fq文件中读取字符串到buf中if(ptr == NULL){break;}printf("str=%s\n", str);}fclose(fq);return 0;
}
现象展示:
3> 完成注册登录功能
做个小菜单:
功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中
功能2是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配则提示登录失败
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
#define Size 50
void register_user();
void login_user();
int main(int argc, const char *argv[])
{int number=0;FILE *fp = NULL;while(1){printf("\t\t======XXX登录界面============\n");printf("\t\t======1、注册============\n");printf("\t\t======2、登录============\n");printf("\t\t======0、退出============\n");printf("请输入选项:");scanf("%d", &number);getchar();//对菜单多分支选择switch(number){case 1:{//注册功能register_user(); }break;case 2:{//登录功能login_user(); }break;case 0:{goto END;}default:printf("您输入的功能有误,请重新输入\n");break;}}
END:return 0;
}
void register_user()
{ char username[Size]; char password[Size]; printf("\n注册新用户:\n"); printf("请输入账户名:"); scanf("%s", username); printf("请输入密码:"); scanf("%s", password); FILE *file = fopen("./user.txt", "a"); if (file == NULL) { perror("打开文件失败"); return; } fprintf(file, "%s,%s\n", username, password); fclose(file); printf("注册成功!\n");
}
void login_user()
{char username[Size];char password[Size];char file_username[Size];char file_password[Size];printf("\n登录:\n");printf("请输入账户名:");scanf("%s", username); printf("请输入密码:");scanf("%s", password); FILE *file = fopen("./user.txt", "r");if (file == NULL) {perror("打开文件失败");return;}int found = 0;while (fscanf(file, "%[^,],%s\n", file_username, file_password) != EOF) {printf("%s %s",file_username,file_password);if (strcmp(username, file_username) == 0 && strcmp(password, file_password) == 0) {found = 1;break;}}fclose(file);if (found) {printf("登录成功!\n");} else {printf("登录失败,账户或密码错误。\n");}
}
现象展示:
思维导图