IO进程线程

函数练习

使用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;
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值