本周大头作业:使用c语言对TXT文件的控制

本次课程与作业首次涉及到了c语言对自己文件的控制,由于使用了指针,所以首触指针对我们来说时比较麻烦而又困难,不过问题不会很大,因为书本上已经有一个相关的模板供我们参考,但是需要仔细分析,谨慎入坑!不惧入坑!话不多说了,直接进入试题!
一.试题:
请在第一周作业的基础上,继续完成:找出给定的文件中数组的最大值及其对应的最小下标(下标从0开始)。并将最大值和对应的最小下标数值写入文件。
输入:
请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
输出
在不删除原有文件内容的情况下,将最大值和对应的最小下标数值写入文件。
二.分析:之前我们是在c语言编辑器中将题目要求完成,但是这次作业需要我们利用c语言编辑器对TXT文件编辑板进行控制以完成任务!
三.先依照教材上的模板写上代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
FILE*fp;
char a[20];
int i,N,biao=0,max=0;
if((fp=fopen("D:\wonzenkei.txt","r"))==NULL);
{
printf("File open error!\n");
exit(0);
}
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
max=a[0];
for(i=0;i<N;i++){
if(a[i]>max)
max=a[i];
biao=i;
}
fprintf("%d %d",max,biao);
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}

四.报错截图:
问题果然出现
五.问题解决:打开文件错误,此处也许是多数同学碰到的问题,无法打开文件,究其根源,花了半小时才发现if((fp=fopen("D:\wonzenkei.txt","r"))==NULL)后多了一“;”号
六.大功告成时才发现,如图:
原有的TXT文档已被更改,原输入的几个数已不存在,只输出了题中要求的最大数与下标
六.问题解决:调试代码发现,主代码中只有scanf,主代码并没有与TXT文本文件相挂钩,也许这就是导致TXT文本文件内容被更改的原因
七.到最后的一步了,是时候要解决问题了!在代码中键入fscanf(fp,"%d",&a[i])还有在for循环中需要键入fprintf(fp,"%d",a[i]);据本人推测因为使用c语言控制TXT文本时,文本可能已经发生了更改,必须要使用该行代码,才以确保c语言编辑框中的内容再次与TXT文本相同步!
八 .再次附上修改后的代码:
#include<bits/stdc++.h>// 此处强烈建议大家使用c++万能头文件的开头,因为它所包含的库函数是很多的,所以使用该开头能为大家省去很多的麻烦!!
int main()
{
FILE *fp;
char a[20];
int i,N,biao=0,max=0;
if((fp=fopen("D:\wonzenkei.txt","w+"))==NULL)//一定要注意,此处还是需要使用w+以打开TXT文本文件,因为我们需要对数据进行处理并修改,并且w+对文件打开并处理的作用会更大!
{
printf("File open error!\n");
exit(0);
}
scanf("%d",&N);
fprintf(fp,"%d\n",N);//此处一定需要fprintf,作用在第七步已说明
for(i=0;i<N;i++){
scanf("%d",&a[i]);
fscanf(fp,"%d",&a[i]);
fprintf(fp,"%d",a[i]);//此处同上
}
max=a[0];
for(i=0;i<N;i++)
if(max<a[i]){
max=a[i];
biao=i;
}
fprintf(fp,"\n%d %d",max,biao);
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
九.思维流程图:
十.总结:此处需要明白,fprintf,代表在数据TXT文本中打印,fscanf代表在数据TXT文本中输入,其他暂时便没有想到什么东西了,闲余时间再好好多学习一下相关的文件指针方面知识吧
由于我名字粤语读法是wonzenkei,所以我下意识地把文件名写成了wonzenkei.txt

猜你喜欢

转载自www.cnblogs.com/wonzenkei/p/10480784.html