免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3129 | 回复: 4
打印 上一主题 下一主题

[C++] C++中关于文件输出,要求每隔多少步就输出一次结果,后一次结果与前一次结果并不覆盖 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-20 15:56 |只看该作者 |倒序浏览
        我写了一个简易的代码,来阐述我的问题:
#include "stdio.h"
#include "stdlib.h"
int main()
{
        int i=0;
        int snapshot=20;
        double a[51]={0};
        FILE *fp;
        for(i=0;i<=1000;i++)
        {
                if(i%snapshot==0)
                j=i/snapshot;
                a[j]=a[j]+1;
                fp=fopen("position.txt","r+");
                if(fp!=NULL)
                        fprintf(position,"%f",a[j]);
                fclose(fp);
        }
}
        a[50]表示某个粒子A的位置,现在我要求每隔20步就输出一次A的位置,结果输出到txt文本中,但是这样输出来的结果,后一次都会覆盖前一次,如果我想保留之前每一步的输出结果,例如说,i=0时,A的位置a[0]输出到position000.txt中;当i=20时,A的位置a[1]输出到position001.txt中;当i=40时,A的位置a[2]就输出到position002.txt中,当i=60时,A的位置a[3]就输出到position003.txt中;……不断循环……;最后i=1000时,A的位置a[50]就输出到position050.txt中。我写的这个简易程序,只能做到每隔20步输出一次粒子A的位置,但是后一次的计算结果都会覆盖前一次的计算结果,所以最终输出的文本还是position.txt,内容为a[50]=51。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
2 [报告]
发表于 2014-03-20 16:38 |只看该作者
本帖最后由 w_anthony 于 2014-03-20 16:41 编辑

该怎么说呢,LZ你需要拆分你所遇到的问题,比如你这个问题,你是不是想问怎样生成position000.txt到position050.txt的文件名?而其他的信息其实都是干扰信息?
如果是这样的话,你可以
char str[128];
sprintf(str, "position%03d.txt", j);
fp=fopen(str, "w");
------------------------------
如果你要写到同一个文件里面也是可以的,fopen("position.txt", "a");
fprintf(fp, "%f\r\n", a[j]);

论坛徽章:
1
戌狗
日期:2014-03-04 13:31:12
3 [报告]
发表于 2014-03-20 18:21 |只看该作者
是下面这样吗?
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. int main()
  4. {
  5.     int i = 0;
  6.     int j = 0;
  7.     int snapshot=20;
  8.     double a[51]={0};
  9.     char file_name[256] = {0};
  10.     FILE *fp = NULL;
  11.     for (i = 1; i <= 1000; i++)
  12.     {
  13.         if (i % snapshot == 0)
  14.         {
  15.             j = i / snapshot;
  16.             a[j] = a[j - 1] + 1;
  17.             snprintf(file_name, sizeof(file_name), "position%03d.txt", j);
  18.             fp = fopen(file_name,"w+");
  19.             if (NULL != fp)
  20.             {
  21.                 fprintf(fp, "%f\n", a[j]);
  22.                 fclose(fp);
  23.             }
  24.             else
  25.             {
  26.                 printf("open file[%s] error.", file_name);
  27.             }
  28.         }
  29.     }

  30.     return 0;
  31. }
复制代码
又或是下面这样?
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. int main()
  4. {
  5.     int i = 0;
  6.     int j = 0;
  7.     int snapshot=20;
  8.     double a[51]={0};
  9.     FILE *fp = fopen("position.txt", "a+");
  10.     if (NULL == fp)
  11.     {
  12.         printf("open file[%s] failed.\n", "position.txt");
  13.         return -1;
  14.     }

  15.     for (i = 1; i <= 1000; i++)
  16.     {
  17.         if (i % snapshot == 0)
  18.         {
  19.             j = i / snapshot;
  20.             a[j] = a[j - 1] + 1;
  21.             fprintf(fp, "%f\n", a[j]);
  22.         }
  23.     }

  24.     fclose(fp);
  25.     return 0;
  26. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2014-03-20 20:31 |只看该作者
回复 2# w_anthony

嗯,我要表达的就是第一句,谢谢你,你的方法很管用。{:3_193:} {:3_193:} {:3_193:}
   

论坛徽章:
0
5 [报告]
发表于 2014-03-20 20:32 |只看该作者
回复 3# 肥头大呆脑

谢谢你的回答,应该是第一种方法,你的办法很惯用,同时也谢谢你给出了具体代码,非常感谢!{:3_193:} {:3_193:} {:3_193:}
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP