10.15作业

1.使用fread和fwrite完成两个文件的拷贝,要求源文件和目标文件由外界输入

#include<myhead.h>


typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;

int main(int argc, const char *argv[])
{
	//若外部参数不够,直接结束函数
	if(argc<3)
	{
		printf("参数不足\n");
		return 0;
	}
	//向要读取的内容的文件写入数据
	FILE* fp1=fopen(argv[1],"w");
	//定义字符数组用于存储输入数据
	char buf[128]="";
	scanf("%s",buf);
	//将数组内的数据写入文件中
	fwrite(buf,10,3,fp1);
	//关闭文件
	fclose(fp1);
	//重新以只读形式打开文件
	fp1=fopen(argv[1],"r");
	//定义第二个文件用于作为复制
	FILE* fp2=fopen(argv[2],"w");
	//判断是否打开成功,失败输出错误信息
	if(fp1==NULL)
	{
		perror("fopen");
		return -1;
	}
	char rbuf[64]="";
	//死循环确保完全复制
	while(1)
	{
		//挨个字节读取文件1中的数据
		int res=fread(rbuf,1,1,fp1);
		//将读取到的数据写入文件2中
		fwrite(rbuf,1,1,fp2);
		//文件结束跳出死循环
		if(res==0)
		{
			break;
		}
	}
	//关闭文件
	fclose(fp1);
	fclose(fp2);

	return 0;
}

 运行结果:

被复制文件

 复制文件

2.使用fgets获取当前文件的总行数

#include<myhead.h>


typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;

int main(int argc, const char *argv[])
{
	//定义指针打开文件
	FILE* fp=fopen("./hw2.c","r");
	//判断文件是否打开成功,失败输出错误信息
	if(fp==NULL)
	{
		perror("fopen");
		return -1;
	}
	//计算行数
	int count=0;
	while(1)
	{
		//定义一个足够大的字符串数组确保文件每一行不会超过数组容量
		char buf[128]="";
		//fgets遇到回车结束读取
		char* res = fgets(buf,128,fp);
		//读取到文件结束符跳出循环
		if(res==NULL)
		{
			break;
		}
		//没有遇到文件结束符则count+1
		if(buf[strlen(buf)-1]=='\n')
		count++;
	}
	printf("该文件行数为:%d\n",count);
	return 0;
}

 运行结果:

3.向文件中每一秒打印系统时间

#include<myhead.h>


typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;

//统计行数的函数
int line(FILE* fp)
{
	int len=0;
	fp=fopen("./hw3.txt","r");
	if(fp==NULL)
	{
		perror("fopen");
		return -1;
	}
	while(1)
	{
		//读取文件中的换行符
		int ch=fgetc(fp);
		if(ch=='\n')
		{
			len++;
		}
		if(ch==EOF)
		{
			break;
		}
	}
	fclose(fp);
	//将得到的行数以返回值的形式返回
	return len;
}

int main(int argc, const char *argv[])
{
	
	time_t sys_time = 0;
	time_t last_sys_time=0;
	//获取一次系统当前时间
	time(&sys_time);
		FILE* fp = fopen("./hw3.txt","a+");
		//将得到的文件行数赋值给num
		int num=line(fp);
	while(1)
	{
	//再次获取系统时间
	time(&last_sys_time);
	//当第一次获取的系统时间和第二次不相等时执行下列语句
	if(sys_time!=last_sys_time)
	{
		//将再次获取的系统时间赋值给第一次获取系统时间的变量
		sys_time=last_sys_time;
		//调用localtime函数,将当前时间赋值给localTime结构体
		struct tm *localTime;
		localTime = localtime(&sys_time);
		//将时间转化为格式串打印到终端
		printf("%02d:%4d年-%02d月-%02d日 %02d时:%02d分:%02d秒\n",num+1,
										localTime->tm_year+1900,localTime->tm_mon+1,
										localTime->tm_mday,localTime->tm_hour,
										localTime->tm_min,localTime->tm_sec);
		//手动刷新缓冲区
		fflush(stdout);
		//将时间输出到文件中
	    fprintf(fp,"%02d:%4d年-%02d月-%02d日 %02d时:%02d分:%02d秒\n",num+1,
										localTime->tm_year+1900,localTime->tm_mon+1,
										localTime->tm_mday,localTime->tm_hour,
										localTime->tm_min,localTime->tm_sec);
		//行数自增
		num++;
		//刷新缓冲区
		fflush(fp);
	}
	}
		fclose(fp);
	return 0;
}

 运行结果:

 

 思维导图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值