C++中关于文件的输出,要求每隔一定步数进行输出,并且输出的文件内容不能覆盖之前的内容

w8602123 2014-03-20 03:48:59
我写了一个简易的代码,来阐述我的问题:
#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中。
...全文
271 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
w8602123 2014-03-21
  • 打赏
  • 举报
回复
引用 9 楼 sduxiaoxiang 的回复:
int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"ra+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }
引用 9 楼 sduxiaoxiang 的回复:
int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"ra+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }
嗯,谢谢你!其实昨天你回给我的代码就是正确的,可惜我自己编写的时候,疏忽了,所以出现了错误,我也没认真检查,所以就把这个错误报给你了。另外,这个文件的打开方式用“r+”的时候,输不出来结果,但是用“a+"和"w+"的时候,都可以输出结果,前者在文件内容末尾继续追加,后者更新文件内容。
sduxiaoxiang 2014-03-21
  • 打赏
  • 举报
回复
int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"ra+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }
w8602123 2014-03-20
  • 打赏
  • 举报
回复
引用 7 楼 cangyingzhijia 的回复:
[quote=引用 1 楼 sduxiaoxiang 的回复:] int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"r+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }
引一个,估计靠谱[/quote] 亲啊,这个不靠谱,我测试过,达不到我的要求。
苍蝇①号 2014-03-20
  • 打赏
  • 举报
回复
引用 1 楼 sduxiaoxiang 的回复:
int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"r+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }
引一个,估计靠谱
w8602123 2014-03-20
  • 打赏
  • 举报
回复
引用 3 楼 shiguojie19892 的回复:
[quote=引用 1 楼 sduxiaoxiang 的回复:] int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"r+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }
引用 2 楼 zhao4zhong1 的回复:
fp=fopen("position.txt","a");
修改fopen的打开方式就好了,搜索fopen的参数就找到了,自动往文本的最后追加。[/quote] 你也说了是自动往文本后追加,也就是说,所有的a[0],a[1],a[2],a[3]……a[50]都将存储到position.txt中去,可是我要求每次生成一个不同的文件名,即position000.txt,position001.txt,position002.txt,position003.txt……position050.txt分别存储a[0],a[1],a[2],a[3]……a[50]。求解!!!
w8602123 2014-03-20
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
fp=fopen("position.txt","a");
不对啊,我是要生成不同的文件名,position001.txt,position002.txt,position003.txt…………position050.txt;如果将文件的打开方式改为"a+",那么所有的a[]全部都将存储在position.txt中了,不符合我的要求!
w8602123 2014-03-20
  • 打赏
  • 举报
回复
引用 1 楼 sduxiaoxiang 的回复:
int main()
{
int i=0;
int snapshot=20;
double a[51]={0};
char filename[256];
FILE *fp;
for(i=0;i<=1000;i++)
{
if(i%snapshot==0)
j=i/snapshot;
sprintf(filename, "position%3d.txt", j);
a[j]=a[j]+1;
fp=fopen(filename,"r+");
if(fp!=NULL)
fprintf(filename,"%f",a[j]);
fclose(fp);
}
}

你好,我参考了你的方法,进行了测试,结果还是不对,每次打开文件都失败了,没办法存储数据,怎么破?求解!谢谢!


shiguojie19892 2014-03-20
  • 打赏
  • 举报
回复
引用 1 楼 sduxiaoxiang 的回复:
int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"r+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }
引用 2 楼 zhao4zhong1 的回复:
fp=fopen("position.txt","a");
修改fopen的打开方式就好了,搜索fopen的参数就找到了,自动往文本的最后追加。
赵4老师 2014-03-20
  • 打赏
  • 举报
回复
fp=fopen("position.txt","a");
sduxiaoxiang 2014-03-20
  • 打赏
  • 举报
回复
int main() { int i=0; int snapshot=20; double a[51]={0}; char filename[256]; FILE *fp; for(i=0;i<=1000;i++) { if(i%snapshot==0) j=i/snapshot; sprintf(filename, "position%3d.txt", j); a[j]=a[j]+1; fp=fopen(filename,"r+"); if(fp!=NULL) fprintf(filename,"%f",a[j]); fclose(fp); } }

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧