作业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;
}
效果图: