10对文件的输入输出

这些C语言程序展示了文件的基本操作,包括打开、读取、写入和排序。程序涉及用户输入、文件读写、字符串处理及结构体数据的序列化。其中,10.3实现了字符串数组的排序并保存,10.4和10.6涉及结构体数组的读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C文件的有关基础知识

什么是文件?
(1)程序文件
(2)数据文件

10.1

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *fp;
	char ch,filename[10];
	printf("请输入所用的用户名:");
	scanf("%s",filename);
	//printf("\n");
	getchar();
	if((fp==fopen(filename,"r")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	 } 
	 printf("请输入一个准备存储到磁盘的字符串,以#结束:");
	 ch=getchar();
	 while(ch!='#')
	 {
	 	fputc(ch,fp);
	 	putchar(ch);
	 	ch=getchar();
	  } 
	fclose(fp);
	putchar(10);
	return 0;
}

10.2

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *in,*out;
	char ch,infile[10],outfile[10];
	printf("输入读入的用户名:");
	scanf("%s",infile);
	printf("输入输出的用户名:");
	scanf("%s",outfile); 
	//printf("\n");
//	getchar();
	if((in=fopen(infile,"r")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	 } 
	 if((out=fopen(outfile,"r")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	 } 
	  ch=fgetc(in);
	/* printf("请输入一个准备存储到磁盘的字符串,以#结束:");

	 while(ch!='#')
	 {
	 	fputc(ch,in);
	 	putchar(ch);
	 	ch=getchar();
	  } 
	  */
	 while(!feof(in))
	 {
	 	fputc(ch,out);
	 	putchar(ch);
	 	ch=fgetc(in);
	  } 
	fclose(in);
	putchar(10);
	fclose(out);
	return 0;
}

10.3

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	FILE *fp;
	char str[3][10],temp[10];
	int i,j,k,n=3;
	printf("enter strings:\n");
	for(i=0;i<n;i++)
	{
		gets(str[i]);
	 } 
	 
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(strcmp(str[k],str[j])>0) k=j;
			if(k!=i)
			{
				strcpy(temp,str[i]);
				strcpy(str[i],str[k]);
				strcpy(str[k],temp);
			}
		}
	}
	
	if((fp=fopen("D:\\CC\\string.dat","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	printf("The new sequence:\n");
	for(i=0;i<n;i++)
	{
		fputs(str[i],fp);
		fputs("\n",fp);
		printf("%s\n",str[i]);
	}
	
	return 0;
}

10.4

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student_type
{
	char name[10];
	int num;
	int age;
	char addr[15];
}stu[10];
int main()
{
	void save();
	int i;
	printf("please enter data of students:\n");
	for(i=0;i<10;i++)
	{
		scanf("%s%d%d%d",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
	}
	save();
	return 0;
}

void save()
{
	int i;
	FILE *fp;
	if((fp=fopen("stu.dat","wb")) == NULL )
	{
		printf("cannot open file\n");
		return;
	}
	for(i=0;i<10;i++)
	{
		if(fwrite(&stu[i],sizeof(struct Student_type),1,fp) !=1)
		{
			printf("file write error\n");
		}
	}
	fclose(fp);
}

10.5

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	FILE *fp1,*fp2;
	
	char ch,filename[10];
	printf("请输入所用的用户名:");
	scanf("%s",filename);
	//printf("\n");
	getchar();
	if((fp1==fopen(filename,"r")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	 } 
	 printf("请输入一个准备存储到磁盘的字符串,以#结束:");
	 ch=getchar();
	 while(ch!='#')
	 {
	 	fputc(ch,fp1);
	 	putchar(ch);
	 	ch=getchar();
	  } 
	//fclose(fp1);

	putchar(10);
	
	
	fp1=fopen("file1.dat","r");
	fp2=fopen("file2.dat","w");
	ch=getc(fp1);
	while(ch!=EOF)
	{
		putchar(ch);
		ch=getc(fp1);
	}
	putchar(10);
	rewind(fp1);
	ch=getc(fp1);
	
	while(ch!=EOF)
	{
		fputc(ch,fp2);
		ch=fgetc(fp1);
	}
	  fclose(fp1);
	  fclose(fp2);
	return 0;
}

10.6

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student_type
{
	char name[10];
	int num;
	int age;
	char addr[15];
}stu[10];

int main()
{
	int i;
	FILE *fp;
	
	
	if((fp=fopen("stu.dat","rb")) == NULL )
	{
		printf("cannot open file\n");
		exit(0);
	}
	for(i=0;i<10;i+=2)
	{
		fseek(fp,i*sizeof(struct Student_type),0);
		fread(&stu[i],sizeof(struct Student_type),1,fp);
		printf("%10s%4d%4d%15s\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
	}
	fclose(fp);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值