标准IO练习

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

#include <myhead.h>
int main(int argc, const char *argv[])
{
	//判断输入的文件是否个数为3
	if(argc != 3)
	{
		fprintf(stderr,"input file error\n");
		return -1;
	}
	//说明传输的文件数量正确
	//打开所需要的文件
	FILE* srcfp = fopen(argv[1],"r+");
	if(NULL == srcfp)
	{
		perror("srcfp open error");
		return -1;
	}
	FILE* desfp = fopen(argv[2],"w+");
	if(NULL == desfp)
	{
		perror("desfp open error");
		return -1;
	}
	//创建一个数组接受暂时保存传输的数据
	char data[100]="";
	while(1)
	{
		//从源文件中读取数据
		int res = fread(data , 1,sizeof(data),srcfp);
		if(res==strlen(data))
		{
			perror("读取结束");
		}

		int des = fwrite(data , 1,strlen(data),desfp);
		if(des==strlen(data))
		{
			perror("写入结束");
			fprintf(stdin ,"复制成功\n");
			break;
		}
		
	}
	fclose(srcfp);
	fclose(desfp);

	return 0;
}

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

#include <myhead.h>
int main(int argc, const char *argv[])
{
	//判断输入的文件是否个数为2
	if(argc != 2)
	{
		fprintf(stderr,"input file error\n");
		return -1;
	}
	FILE* fp = fopen(argv[1],"r");
	if(NULL == fp)
	{
		perror("fopen error");
		return -1;
	}
	char s[100] = "";
	int i=0;
	while(1)
	{
		char *p = fgets(s,sizeof(s),fp);
		if(p != NULL){
			i++;                                //读取成功计数加一行
		}else if(p == NULL){
			break;                              //读取失败,相当于读取结束
		}

	}
	fclose(fp);
	printf("该文件有%d行\n",i);

	return 0;
}

 3> 向文件中每一秒打印当前系统时间

#include <myhead.h>
#include <time.h>
int main(int argc, const char *argv[])
{
	char buf[128] = "";           //存放转变后的字符串
	int i=0;
	char s[100] ="";

	FILE * profp = fopen("time.txt","r+");              //追加的形式向文件添加时间戳
	if(NULL == profp)
	{
		perror("fopen error");
		return -1;
	}


	while(1)
	{
		char *p = fgets(s,sizeof(s),profp);
		if(p != NULL){
			i++;                                //读取成功计数加一行
		}else if(p == NULL){
			break;                              //读取失败,相当于读取结束
		}

	}	

	while(1){
		
	//定义变量存放秒数
	time_t sys_time = time(NULL);

	//将秒数转换为结构体
	struct tm* time_fist = localtime(&sys_time);

		sprintf(buf,"%04d-%02d-%02d %02d:%02d:%02d\n",time_fist->tm_year+1900,\
										time_fist->tm_mon+1,\
										time_fist->tm_mday,\
										time_fist->tm_hour,\
										time_fist->tm_min,\
										time_fist->tm_sec);
		printf("buf = %s\n", buf);
		printf("s = %s\n",s);
		if(strcmp(s,buf)!=0)
		{
			i++;
			printf("chenggong\n");
			fprintf(profp,"%d、",i);
			fwrite(buf,sizeof(buf),1,profp);
			fprintf(profp,"\n");
			fflush(profp);
		}
		strcpy(s,buf);
	 	sleep(1);

	}
	fclose(profp);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值