作业1:使用fgets统计给定文件的行数
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{//定义FILE *类型的句柄FILE *fp=NULL;//判断是否进行了外部传参if(argc != 2){printf("unknow filename\n");return -1;}//以只读的形式打开文件if(( fp=fopen(argv[1],"r") ) ==NULL){perror("fopen error");return -1;}//统计文件行号int count=0;//定义一个行号的计数器char s[5]="";//存储读取到的字符串while(1){char *p=fgets(s,sizeof(s),fp);//读取字符串if(p==NULL){//读到文件结束则结束break;}for(int i=0;i<sizeof(s);i++)//遍历每次读取的字符串,看是否有换行{if(*(p+i)=='\n'){count++;}}}printf("line=%d\n",count);//关闭文件fclose(fp);return 0;
}
效果图:
作业2:使用fputs和fgets完成两个文件的拷贝
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{//定义FILE *类型的句柄FILE *fp=NULL;//判断是否进行了外部传参if(argc != 3){printf("unknow filename\n");return -1;}//以只读的形式打开文件if(( fp=fopen(argv[1],"r") ) ==NULL){perror("fopen read error");return -1;}FILE *fp1=NULL;//以只写的形式打开文件if(( fp1=fopen(argv[2],"w") ) ==NULL){perror("fopen write error");return -1;}//定义字符数组存储读取到的字符串char s[5]="";//遍历读取的字符串while(1){char *p=fgets(s,sizeof(s),fp);//读取字符串if(p==NULL){//读到文件结束则结束break;}fputs(p,fp1);//将读取到的字符串拷贝到另外一个文件中}//关闭文件fclose(fp);fclose(fp1);return 0;
}
效果图:
作业3:完成注册登录功能
做个小菜单,功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中
功能2是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配则提示登录失败
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{int menu = 0;int id=0;int password=0;while(1){printf("\t**********登录界面**********\n");printf("\t**********1.注册**********\n");printf("\t**********2.登录**********\n");printf("\t**********0.退出**********\n");printf("please enter menu:");scanf("%d", &menu);getchar();//吸收垃圾字符//对菜单多分支选择switch(menu){case 1:{//注册功能//打开文件FILE *fp=NULL;//以追加的形式打开文件if(( fp=fopen("./id.txt","a+")) == NULL){perror("fopen error");return -1;}//注册账户和密码printf("please enter id:");scanf("%d",&id);printf("please enter password:");scanf("%d",&password);fprintf(fp,"%d %d\n",id,password);//关闭文件fclose(fp);}break;case 2:{//登录功能//打开文件FILE *fp=NULL;//以只读的形式打开文件if(( fp=fopen("./id.txt","r")) == NULL){perror("fopen error");return -1;}//提示输入账户和密码printf("please enter id:");scanf("%d",&id);printf("please enter password:");scanf("%d",&password);//遍历文件中的内容查询账户密码是否正确while(1){int val1;//获取注册的账户fscanf(fp,"%d",&val1);int val2;//获取注册的密码fscanf(fp,"%d",&val2);if(val1==id && val2==password){puts("登录成功");break;}else{puts("账户或密码不正确");break;}if(val1==EOF || val2==EOF){break;}}//关闭文件fclose(fp);}break;case 0:goto END;//退出default:printf("error and please try again\n");}//提示输入任意键按回车结束printf("请输入任意键按回车结束!!!\n");while(getchar() != '\n');}
END:return 0;
}
效果图: