函数练习
使用fgets统计给定文件的行数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//argc:表示外部传参的个数
//argv:外部传参的参数数组
//argv[0]:./a.out
//判断是否进行了外部传参
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 line = 0;
char ch[5]=""; //遍历文件的字符
while(1) //循环从文件中读取一个字符,直到读取结束为止
{
char *ptr=fgets(ch,sizeof(ch),fp);
if(ptr==NULL)
{
break;
}
//判断获取的字符是否为'\n'
if(ch[strlen(ch)-1] == '\n')
{
line++;
}
}
printf("一共有%d行\n", line);
//关闭文件
fclose(fp);
return 0;
}
效果图
使用fputs和fgets完成两个文件的拷贝
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
if(argc !=3)
{
printf("enter error\n");
return -1;
}
FILE *fp1=NULL;
if((fp1=fopen(argv[1],"r"))==NULL)
{
perror("fopen error");
return -1;
}
FILE *fp2=NULL;
if((fp2=fopen(argv[2],"w"))==NULL)
{
perror("fopen error");
return -1;
}
char *ptr=NULL;
char ch[5]="";
while(1)
{
ptr=fgets(ch,sizeof(ch),fp1);
if(ptr==NULL)
break;
fputs(ch,fp2);
}
puts("拷贝成功!");
fclose(fp1);
fclose(fp2);
return 0;
}
效果图
制作一个登录注册界面
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
FILE *fp1=NULL;
FILE *fp2=NULL;
char zh[100]="";
char ma[100]="";
while(1)
{
system("clear");
printf("\t\t******************登录系统****************\n");
printf("\t\t*******************1.注册****************\n");
printf("\t\t*******************2.登录****************\n");
printf("\t\t*******************3.退出****************\n");
int num;
printf("输入选项:");
scanf("%d",&num);
switch (num)
{
case 1:
{
if((fp1=fopen("./zhanghao.txt","a+"))==NULL)
{
perror("错误信息");
return -1;
}
if((fp2=fopen("./mima.txt","a+"))==NULL)
{
perror("错误信息");
return -1;
}
printf("请输入账号:");
scanf("%s",zh);
fprintf(fp1,"%s\n",zh);
printf("请输入密码:");
scanf("%s",ma);
fprintf(fp2,"%s\n",ma);
fclose(fp1);
fclose(fp2);
break;
}
case 2:
{
if((fp1=fopen("./zhanghao.txt","r"))==NULL)
{
perror("错误信息");
return -1;
}
char zhku[100]="";
printf("请输入账号:");
scanf("%s",zhku);
while(fgets(zh,sizeof(zhku),fp1)!=NULL)
{
zh[strlen(zh)-1]='\0';
if(strcmp(zh,zhku)!=0)
{
printf("账号输入错误\n");
break;
}
if(strcmp(zh,zhku)==0)
{
break;
}
}
{
if((fp2=fopen("./mima.txt","r"))==NULL)
{
perror("错误信息");
return -1;
}
char maku[100]="";
printf("请输入密码:");
scanf("%s",maku);
while(fgets(ma,sizeof(maku),fp2)!=NULL)
{
ma[strlen(ma)-1]='\0';
if(strcmp(ma,maku)!=0)
{
printf("密码错误\n");
continue;
}
else
{
printf("登陆成功\n");
fclose(fp1);
fclose(fp2);
break;
}
}
break;
}
}
case 3:goto END;
default:printf("输入选项错误\n");
}
printf("输入任意键按回车结束!\n");
while(getchar()!='\n');
}
END:
return 0;
}