作业1:用fgets统计给定文件的行数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc ,const char *argv[])
{
FILE *fp=NULL; //操作文件的句柄
if((fp=fopen("./test.txt","r"))==NULL) //只读形式打开文件,加括号提高优先级
{
perror("fopen error");
return -1;
}
int count=0;
while(1)
{
char ch=fgetc(fp); //从fp指向的文件中读取一个字符
if(ch==EOF) //说明读取到文件结束
{
break;
}
if(ch=='\n')
{
count++;
}
}
printf("count=%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 *w=NULL;
FILE *r=NULL; //操作文件的句柄
if((r=fopen("./test.txt","r"))==NULL) //以只读形式打开文件
{
perror("error");
return -1;
}
if((w=fopen("./test1.txt","w"))==NULL) //以只写形式打开文件
{
perror("error");
return -1;
}
while(1)
{
char ch=fgetc(r); //从r指向的文件中读取一个字符
fputc(ch,w); //将ch指向的文件中的字符写入w指向的文件
if(ch==EOF) //读取到文件结束
{
break;
}
}
fclose(w);
fclose(r);
}
作业3:完成注册登录功能
做个小菜单,功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中
功能2是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配则提示登录失败
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int num = 0;
int ID=0;
int password=0;
while(1)
{
printf("---------主菜单-------\n");
printf("---------1.注册---------\n");
printf("---------2.登录---------\n");
printf("---------3.退出---------\n");
printf("please enter number:");
scanf("%d", &num);
getchar();//吸收垃圾字符
switch(num) //对菜单多分支选择
{
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 ID2;//获取注册的账户
fscanf(fp,"%d",&ID2);
int password2;//获取注册的密码
fscanf(fp,"%d",&password2);
if(ID2==ID&&password2==password)
{
puts("登录成功");
break;
}
else
{
puts("账户或密码不正确");
break;
}
if(ID2==EOF||password2==EOF)
{
break;
}
}
fclose(fp);
}
break;
case 3:goto out; //退出菜单
default:printf("error and please try again\n");
}
printf("请输入任意键按回车结束!!!\n");
while(getchar() != '\n');
}
out:
return 0;
}
思维导图