10 对文件的输入输出(2)

本文介绍了C语言中字符串操作的函数如gets()和fputc()的使用,以及文件I/O操作,包括打开、写入、读取和排序学生数据的示例。重点展示了字符串大小写转换、文件内容读写及数据结构如结构体的运用。

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

习题
3

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	FILE *fp;
	char str[100];
	int i=0;
	if((fp=fopen("al","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	printf("input a string:\n");
	gets(str);
	while(str[i] != '!')
	{
		if((str[i] >'a') && (str[i] < 'z'))
		{
			str[i] = str[i] -32;
		}
		fputc(str[i],fp);
		i++;
	}
	fclose(fp);
	fp=fopen("al","r");
	fgets(str,strlen(str)+1,fp);
	printf("%s\n",str);
	fclose(fp);
	return 0;
}

在这里插入图片描述

4、(有问题)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	FILE *fp1,*fp2,*fp;
	int i=0;
	char str1[100],str2[100];
	
	if((fp1=fopen("a1","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	if((fp2=fopen("b1","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	
	printf("input a string1:\n");
	gets(str1);
	while(str1[i]!= '\0')
		{
		if((str1[i]>='a') && (str1[i]<='z'))
	    {putc(str1[i],fp1);} 
	    i++;
	}
	fclose(fp1); 
	
	printf("input a string2:\n");
	gets(str2);
	i=0;
	while(str2[i] !='\0')
	{
		if((str2[i]>='a') && (str2[i]<='z'))
	    {putc(str2[i],fp2);} 
	    i++;
	}
	fclose(fp2);
	
	/*i=0;
	while( str1[i] != '!')
	{
		if((str1[i]>='a')&& (str1[i]<='z'))
		{
			str2[i] = str1[i] -32;
		}
		fputc(str2[i],fp2);
		i++;
	}
	i=0;
	fclose(fp2);*/
	
	
	int j,n,i1;
	char c[100],t,ch;
	/*if((fp1=fopen("a1","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}*/
	fp1 = fopen("a1","r");
	printf("file A:\n");
	for(i=0;ch=fgetc(fp1)!=EOF;i++)
	{
		c[i] = ch;
		putchar(c[i]);
	}
	fclose(fp1);
	
	i1=i;
	/*if((fp2=fopen("b1","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}*/
	fp2=fopen("b1","r");
	printf("\nfile B:\n");
	for(i=i1;(ch=fgetc(fp2)) !=EOF;i++)
	{
		c[i] = ch;
		putchar(c[i]);
	}
	fclose(fp2);
	
	n=i;
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(c[i]>c[j])
			{
				t=c[i];c[i] = c[j];c[j]=t;
			}
		}
	}
	printf("\nfile C:\n");
	fp=fopen("c1","w");
	for(i=0;i<n;i++)
	{
		fputc(c[i],fp);
		putchar(c[i]);
	}
	printf("\n");
	fclose(fp);
	return 0;

	
}

5,

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
	int num;
	char name[10];
	int score[3];
	float ave;
}stu[2];
int main()
{
	int i,j,sum;
	FILE *fp;
	if((fp=fopen("stud","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	for(i=0;i<2;i++)
	{
		sum=0;
		printf("请输入学号:");
		scanf("%d",&stu[i].num);
		printf("请输入姓名:") ;
		scanf("%s",stu[i].name);
		printf("请输入三门课成绩:"); 
		scanf("%d,%d,%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
		stu[i].ave = sum/3;
	}
	
	for(i=0;i<2;i++)
	{
		if(fwrite(&stu[i],sizeof(struct Student),1,fp) !=1)
		{
			printf("file write error\n");
		}
	}
	fclose(fp);
	
	fopen("stud","r");
	for(i=0;i<2;i++)
	{
		fread(&stu[i],sizeof(struct Student),1,fp);
		printf("\n%d,%s,%d,%d,%d,%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]	,stu[i].ave   );
	}
	return 0;
	
}

在这里插入图片描述

6

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
	int num;
	char name[10];
	int score[3];
	float ave;
}stu[2],temp;
int main()
{
	int i,j,sum;
	FILE *fp;
	if((fp=fopen("stud","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	for(i=0;i<2;i++)
	{
		sum=0;
		printf("请输入学号:");
		scanf("%d",&stu[i].num);
		printf("请输入姓名:") ;
		scanf("%s",stu[i].name);
		printf("请输入三门课成绩:"); 
		scanf("%d,%d,%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
		stu[i].ave = sum/3;
	}
	
	for(i=0;i<2;i++)
	{
		if(fwrite(&stu[i],sizeof(struct Student),1,fp) !=1)
		{
			printf("file write error\n");
		}
	}
	fclose(fp);
	printf("formal:\n");
	fopen("stud","r");
	for(i=0;i<2;i++)
	{
		fread(&stu[i],sizeof(struct Student),1,fp);
		printf("\n%d,%s,%d,%d,%d,%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]	,stu[i].ave   );
	}
	printf("\n");
	//排序 选择法 
	for(i=0;i<2;i++)
	{
		for(j=1;j<2;j++)
		{
			if(stu[i].ave<stu[j].ave)
			{
				temp=stu[i];
				stu[i] =stu[j];
				stu[j] =temp;
			}
		}
	 } 
	 
	 printf("Now:\n");
	 fp=fopen("stu_sort","w");
	 for(i=0;i<2;i++)
	 {
	 	fwrite(&stu[i],sizeof(struct Student),1,fp);
	 	printf("\n%d,%s,%d,%d,%d,%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]	,stu[i].ave   );
	 }
	 printf("\n");
	 fclose(fp);
	return 0;
	
}

在这里插入图片描述

有点问题

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
	int num;
	char name[10];
	int score[3];
	float ave;
}stu[2],temp,s;
int main()
{	FILE *fp,*fp1;
	int i,j,sum;
	//插入的学生数据
	printf("请输入插入的学生学号:");
	scanf("%d",s.num); 
	printf("请输入插入的学生姓名:");
	scanf("%s",s.name);
	printf("请输入插入的学生的三门课成绩:"); 
	scanf("%d,%d,%d",&s.score[0],&s.score[1],&s.score[2]);
	sum=s.score[0]+s.score[1]+s.score[2];
	s.ave = sum/3;
		
	sum=0;
	//FILE *fp,*fp1;
	if((fp=fopen("stud","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	for(i=0;i<2;i++)
	{
		sum=0;
		printf("请输入学号:");
		scanf("%d",&stu[i].num);
		printf("请输入姓名:") ;
		scanf("%s",stu[i].name);
		printf("请输入三门课成绩:"); 
		scanf("%d,%d,%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
		stu[i].ave = sum/3;
	}
	
	for(i=0;i<2;i++)
	{
		if(fwrite(&stu[i],sizeof(struct Student),1,fp) !=1)
		{
			printf("file write error\n");
		}
	}
	fclose(fp);
	printf("formal:\n");
	fopen("stud","r");
	for(i=0;i<2;i++)
	{
		fread(&stu[i],sizeof(struct Student),1,fp);
		printf("\n%d,%s,%d,%d,%d,%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]	,stu[i].ave   );
	}
	printf("\n");
	//排序 选择法 
	for(i=0;i<2;i++)
	{
		for(j=1;j<2;j++)
		{
			if(stu[i].ave<stu[j].ave)
			{
				temp=stu[i];
				stu[i] =stu[j];
				stu[j] =temp;
			}
		}
	 } 
	 
	 printf("Now:\n");
	 fp=fopen("stu_sort","w");
	 for(i=0;i<2;i++)
	 {
	 	fwrite(&stu[i],sizeof(struct Student),1,fp);
	 	printf("\n%d,%s,%d,%d,%d,%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]	,stu[i].ave   );
	 }
	 printf("\n");
	 
	 fp1=fopen("sort1.dat","w");
	 fwrite(&s,sizeof(struct Student),1,fp1);
	 printf("\n%d,%s,%d,%d,%d,%.2f\n",s.num,s.name,s.score[0],s.score[1],s.score[2]	,s.ave   );
	 
	 int t;
	 for( t=0;stu[t].ave>s.ave;t++);
	 
	 for(i=t;i<2;i++)
	 {
	 	fwrite(&stu[i],sizeof(struct Student),1,fp1);
	 	printf("\n%d,%s,%d,%d,%d,%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]	,stu[i].ave   );
	 }
	 printf("\n");
	 fclose(fp1);
	 fclose(fp);
	 
	return 0;
	
}

9

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN struct employee 
struct employee
{
	char num[6];
	char name[10];
	char sex[2];
	int age;
	char addr[200];
	int salary;
	char health[80];
	char clas[100];
}em[10];

struct emp
{
	char name[10];
	int salary;
}em_case[10];

int main()
{
	FILE *fp,*fp1,*fp2;
	int i,j;
	/*if((fp=fopen("employee","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}*/
	//建立employee文件 
	printf("NO.  name  sex  age  addr  salary  health  class\n");
	for(i=0;i<2;i++)
	{
		scanf("%s %s %s %d %s %d %s %s",em[i].num,em[i].name,em[i].sex,&em[i].age,em[i].addr,&em[i].salary,em[i].health,em[i].clas );
	}
	//将数据写入文件
	if((fp = fopen("employee","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	 } 
	 for(i=0;i<2;i++)
	 {
	 	if(fwrite(&em[i],sizeof(LEN),1,fp) !=1)
	 	{
	 		printf("error\n");
		 }
	 }
	 fclose(fp);
	 
	 if((fp=fopen("employee","r")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	 printf("\n\n");
	printf("NO.  name  sex  age  addr  salary  health  class\n");
	for(i=0;fread(&em[i],sizeof(LEN),1,fp) !=0;i++)
	{
		printf("\n%4s%8s%4s%6d%10s%6d%10s%8s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].addr,em[i].salary,em[i].health,em[i].clas );
		strcpy(em_case[i].name,em[i].name);
		em_case[i].salary=em[i].salary;
	}
	printf("\n\n****************************************************\n");
	if((fp2=fopen("emp_salary","wb")) ==NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	for(j=0;j<2;j++)
	{
		if((fwrite(&em_case[j],sizeof(struct emp),1,fp2))!=1)
		{
			printf("error\n");
		}
		printf("\n%12s%10d",em_case[j].name,em_case[j].salary); 
	}
	printf("\n****************************************************\n");
	fclose(fp1);
	fclose(fp2);
	return 0;
	
}

在这里插入图片描述

10
//删去一个职工数据

int flag,n;
	char name[10];
	if((fp2=fopen("emp_salary","rb")) ==NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	printf("\noringal data:\n");
	for(i=0;fread(&em_case[i],sizeof(struct emp),1,fp2)!=0;i++)
	{
		printf("\n %8s %7d",em_case[i].name,em_case[i].salary);
	}
	printf("\n");
	fclose(fp2);
	
	n=i;
	printf("input name daleted:\n");
	scanf("%s",name);
	for(flag=1,i=0;flag&&i<n;i++)
	{
		if(strcmp(name,em_case[i].name)==0)
		{
			for(j=i;j<n;j++)
			{
				strcpy(em_case[j].name,em_case[j+1].name);
				em_case[j].salary=em_case[j+1].salary;
			}
			flag=0;
		}
	}
	if(!flag) n=n-1;
	else printf("not found!");
	printf("\nNOW,the content of file:\n");
	for(j=0;j<n;j++)
	{
		if((fwrite(&em_case[j],sizeof(struct emp),1,fp2))!=1)
		{
			printf("error\n");
		}
		//printf("\n%12s%10d",em_case[j].name,em_case[j].salary); 
	}
	fclose (fp2);
	fp=fopen("emp_salary","r");
	for(i=0;fread(&em_case[i],sizeof(struct emp),1,fp)!=0;i++)
	{
		printf("\n%8s %7d",em_case[i].name,em_case[i].salary);
	}
	printf("\n");
	fclose(fp);

11

#include<stdio.h>
#include<stdlib.h> 
int main()
{
	FILE *fp;
	if((fp=fopen("a1","w")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	char str[80],c;
	int i,j,flag=1;
	printf("请输入若干行字符:\n"); 
	while(flag==1)
	{
		gets(str);
		fprintf(fp,"%s",str);
		
		printf("continue?");
		c=getchar();
		if(c =='n') flag=0;
		getchar();
	}
	fclose(fp);
	fp=fopen("a1","r");
	while(fscanf(fp,"%s",str) != EOF)
	{
		for(i=0;str[i] !='\0';i++)
		{
			 if((str[i]>='a') && (str[i] <='z')) str[i] =str[i]-32;
			// printf("%s",str);
		//printf("\n\n\n");
		//printf("%c",str[i]);
		}   
		printf("%s\n",str);  
	}
	fclose(fp);
	return 0;
 } 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值