作业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;
}
if(s[strlen(s)-1]=='\n'){//遇到'\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 registered();
int login();
int main(int argc, const char *argv[])
{
int menu = 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:
{
//注册功能
registered();
}
break;
case 2:
{
//登录功能
int flag=login();
if(flag==0){
puts("登录成功");
}else{
puts("登录失败");
}
}
break;
case 0:goto END;//退出
default:printf("error and please try again\n");
}
//提示输入任意键按回车结束
printf("请输入任意键按回车结束!!!\n");
while(getchar() != '\n');
}
END:
return 0;
}
//注册功能函数
int registered()
{
//定义注册的账号和密码
char registered_user[20]="";
char registered_passwd[20]="";
//输入要账号和密码
printf("please enter user:");
fgets(registered_user,sizeof(registered_user),stdin);
registered_user[strlen(registered_user)-1]='\0';
printf("please enter passwd:");
fgets(registered_passwd,sizeof(registered_passwd),stdin);
registered_passwd[strlen(registered_passwd)-1]='\0';
//定义操作文件的指针
FILE *fp=NULL;
//以追加的形式打开文件
if(( fp=fopen("./id.txt","a") ) ==NULL){
perror("fopen error");
return -1;
}
//将注册的账号和密码写入文件
fprintf(fp,"%s %s\n",registered_user,registered_passwd);
//关闭文件
fclose(fp);
printf("注册成功\n");
return 0;
}
//登录功能函数
int login()
{
//定义要登录的账号和密码
char login_user[20]="";
char login_passwd[20]="";
//从终端获取登录的账号和密码
printf("please enter user:");
fgets(login_user,sizeof(login_user),stdin);
login_user[strlen(login_user)-1]='\0';
printf("please enter passwd:");
fgets(login_passwd,sizeof(login_passwd),stdin);
login_passwd[strlen(login_passwd)-1]='\0';
//以只读的形式打开文件
FILE *fp=NULL;
if(( fp=fopen("./id.txt","r") ) ==NULL){
perror("fopen error");
return -1;
}
char user[20]="";
char passwd[20]="";
int flag=-1;
int res;
//循环遍历文件,查询账号和密码是否匹配
while( (res=fscanf(fp,"%s %s",user,passwd) ) != EOF )
{
if(strcmp(user,login_user)==0 && strcmp(passwd,login_passwd)==0){
flag=0;
break;
}
}
//关闭文件
fclose(fp);
return flag;
}
效果图: