本周大头作业:使用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;
 }

四.报错截图:
问题果然出现1580454-20190305220834213-1360359460.png
五.问题解决:打开文件错误,此处也许是多数同学碰到的问题,无法打开文件,究其根源,花了半小时才发现if((fp=fopen("D:\wonzenkei.txt","r"))==NULL)后多了一“;”号
六.大功告成时才发现,如图:1580454-20190305224204987-2000106959.png
原有的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]);
            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;
}

九.思维流程图:1580454-20190305235247188-725072452.png
十.总结:此处需要明白,fprintf,代表在数据TXT文本中打印,fscanf代表在数据TXT文本中输入,其他暂时便没有想到什么东西了,闲余时间再好好多学习一下相关的文件指针方面知识吧
由于我名字粤语读法是wonzenkei,所以我下意识地把文件名写成了wonzenkei.txt
十 一.学习总结1580454-20190310220750628-203247438.png

转载于:https://www.cnblogs.com/wonzenkei/p/10480784.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值