一、瑞格5864-读取文件修改后输出
1.题目说明
2.思路
step1:打开文件,因为只需要可读,所以用r模式
step2:读取文件每行用fgets(a,50,fp)获取,进行大小写处理后存入数组a,并直接将数组a输出
step3:处理完每行将i变为0,根据文件下一行的读取数据更新数组a
3、代码实现
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[50];
int i=0;
FILE *fp=fopen("测试数据.txt","r");//打开文件
if(fp==NULL)
{
printf("文件打开失败!\n");
exit(1);
}
else
{
while(fgets(a,50,fp)!=NULL)//一行一行获取
{
while(a[i]!='\0')//处理每行,每行的结尾是'\0'
{
if(a[i]>='A'&&a[i]<='Z')
a[i]=a[i]-'A'+'a';
i++;
}
printf("%s",a);
i=0;//一定要把每次的i归零才能更新数组a
}
}
fclose(fp);
return 0;
}
4.文件存储位置+文件内容+运行结果
二、瑞格5865-从键盘输入存入文件
1.题目说明
2.思路
step1:要求可写,所以以w模式打开文件
step2:根据行数t,将每一行写到文件中,记得每行的结尾要加换行符
3、代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int t,n,num;
char a[100];
FILE *fp=NULL;
if((fp=fopen("test01.txt","w"))==NULL)//打开文件
{
printf("文件打开失败!\n");
exit(1);
}
while(scanf("%d ",&t)!=EOF)
{
if(t==0) break;
while(t--)
{
gets(a);
fputs(a,fp);//把每行写入文件
fputc('\n',fp);
// memset(a,0,sizeof(a));
}
}
return 0;
}
/*
3
I love China!
This is a book!
How are you?
2
This is a dog.
I love dogs.
0
I love China!
*/
4.运行结果+文件内容
三、瑞格5866-结构体+存入文件
1.题目说明
2.思路
step1:定义结构体,将所有的的数据存入
step2:将所有的数据按照该有的格式写入文件
3、代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student
{
int num;
char name[20];
char sex;
double scores[3];
double avg;
double sum;
}stu;
int main()
{
int n,i,j,l;
stu *s;
FILE *fp=fopen("student.txt","w");
if(fp==NULL)
{
printf("文件打开失败\n");
exit(1);
}
while(scanf("%d",&n)!=EOF)
{
s=(stu *)malloc(n*sizeof(stu));
//千万记得分配内存,否则数据存不上
for(i=0; i<n; i++)
{
s[i].sum=0;
printf("请输入学生学号:\n");
scanf("%d",&s[i].num);
printf("请输入学生姓名:\n");
getchar();
gets(s[i].name);//名字中有空格
printf("请输入学生性别:\n");
scanf("%c",&s[i].sex);
for(j=0; j<3; j++)
{
scanf("%lf",&s[i].scores[j]);
s[i].sum+=s[i].scores[j];
}
s[i].avg=s[i].sum/3.0;
fprintf(fp,"%d ",s[i].num);
l=strlen(s[i].name);
fprintf(fp,"%d ",l);
fputs(s[i].name,fp);//有空格的名字用puts
fprintf(fp," %c ",s[i].sex);//前后都要加空格
for(j=0; j<3; j++)
{
fprintf(fp,"%.2lf ",s[i].scores[j]);
}
fprintf(fp,"%.2lf %.2lf\n",s[i].avg,s[i].sum);
}
}
fclose(fp);
//运行结束后 先回车再ctrl+z,结束程序
return 0;
}
/*
4
20140101
li ming
m
85 90 92
20140202
zhao li
f
98 78 88
20140013
qiao en
m
92.5 85.6 78.5
20140015
lu yao
m
89.4 86.5 88
*/
4.运行结果+文件内容
三、瑞格5867-结构体+读取文件
1.题目说明
2.思路
step1:定义结构体,按照该有的格式从文件中一行行将所有的的数据读取
step2:将读取到数据输出
3、代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student
{
int num,l;
char name[21];
char sex;
double scores[3];
double avg;
double sum;
}s;
int main()
{
int i;
FILE *fp=fopen("student.txt","r");
if(fp==NULL)
{
printf("文件打开失败\n");
exit(1);
}
while(fscanf(fp,"%d%d ",&s.num,&s.l)!=EOF)
{//后面用到fgets,吃一个空格
fgets(s.name,s.l+1,fp);
fscanf(fp," %c",&s.sex);//坑哥也是字符,记得吃掉
fscanf(fp,"%lf%lf%lf%lf%lf",&s.scores[0],&s.scores[1],&s.scores[2],&s.avg,&s.sum);
printf("%d ",s.num);
for(i=0;s.name[i]!='\0';i++)
{
putchar(s.name[i]);
}
printf(" %c %.2lf %.2lf %.2lf %.2lf %.2lf\n",s.sex,s.scores[0],s.scores[1],s.scores[2],s.avg,s.sum);
}
fclose(fp);
return 0;
}
4.运行结果+文件内容