文件只输出一半

Cain0 2009-10-11 05:02:29
请教一下各位
给一个内容不为空的文件里插入200个字符串,为什么字符串短的时候正常,但是字符串长的时候就会出错呢?
我用的是fp.get()和fp.put()函数,一边查找插入位置一边将文本输出到屏幕,但是字符串太长的话 文本输出一半程序就结束了
环境:windows VC++6.0
#include<stdio.h>   
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<io.h>
#include<time.h>


long FileLength(FILE * handle) //获取文件长度
{
long len=filelength(fileno(handle));
return len;
}


long * order(int n,long *Ran)
{
int a=n;
int i,j;
long maxno;
for(i=0;i<a;i++)
for(j=0;j<a-i-1;j++)
if(*(Ran+j)>*(Ran+j+1))
{
maxno=*(Ran+j+1);
*(Ran+j+1)=*(Ran+j);
*(Ran+j)=maxno;
}
return Ran;
} //冒泡排序


long* RandomNumber(int n,long len) //生成随机数,并将随机数排序
{
int i;
long *Ran=(long*)malloc(sizeof(long)*n);
srand((unsigned)time(NULL));
printf("生成的随机数为:\n");
for(i=0;i<n;i++)
{
*(Ran+i)=rand()%len;
printf("%ld\n",*(Ran+i));
}
Ran=order(n,Ran);
return Ran;
}


int main()
{
FILE * handle; //handle:指向打开的文件的指针
handle = fopen("./1.txt", "r"); //打开文件并获取文件长度
long len=FileLength(handle);
char c=fgetc(handle);
while(c!=EOF) //当文件结束时
{
printf("%c",c);
c=fgetc(handle);
}

printf("\n文件长度的位数:%ld\n",len);
fclose(handle);


ifstream fin("1.txt"); //打开文件
ofstream fout("1.txt",ios::in);
if(!fin)
{
printf("1 error.\n");
abort();
}
if(!fout)
{
printf("1 error.\n");
abort();
}


char str[100];
printf("请输入想要插入的字符:");
scanf("%s",&str);

int n;
printf("请输入想要插入字符的次数:");
scanf("%d",&n);



long * Ran;
Ran=RandomNumber(n,len);
cout<<endl;
printf("排好序的随机数为:\n");
for(int i=0;i<n;i++)
{
cout<<*(Ran+i)<<endl;
}

char ch;
int k=0,l;
long m=0;
while(m<len) //当文件结束时循环结束
{
if(m==len/2)
{
fflush(stdin);
clearerr(stdin);
}
fin.get(ch);
fout.put(ch);
printf("%c",ch);
if(long(ch)<0) //判断文件当前位置是否为汉字
{
fin.get(ch);
fout.put(ch);
printf("%c",ch);
while((*(Ran+k)==m||*(Ran+k)==(m+1))&&k<n) //在与随机数匹配的位置插入字符串
{
for(l=0;l < strlen(str);l++)
fout.put(str[l]);
printf("%s",str);
k++;
}
m+=2;
}
else
{
while(*(Ran+k)==m&&k<n) //在与随机数匹配的位置插入字符串
{
for(l=0;l<strlen(str);l++)
fout.put(str[l]);
printf("%s",str);
k++;
}
m+=1;
}
}

fin.close(); //关闭文件
fout.close();

return 0;
}
...全文
195 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
underuwing 2009-10-12
  • 打赏
  • 举报
回复
mark
赵4老师 2009-10-12
  • 打赏
  • 举报
回复
设断点自己调试一下
Cain0 2009-10-12
  • 打赏
  • 举报
回复
up
问题依然没解决
Cain0 2009-10-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kouwenlong 的回复:]
你怎么说显示不完全呢?
假设文件一开始有5个字符,按照你的输入之后,文件里应该有3005个字符吧。
再次打开程序,会显示文件长度:3005.
我这里就是这样的。

[/Quote]
可是为什么会有一些文本原来的内容不在了呢?
kouwenlong 2009-10-11
  • 打赏
  • 举报
回复
你怎么说显示不完全呢?
假设文件一开始有5个字符,按照你的输入之后,文件里应该有3005个字符吧。
再次打开程序,会显示文件长度:3005.
我这里就是这样的。
Cain0 2009-10-11
  • 打赏
  • 举报
回复
up
感谢楼上的帮助,问题依然没解决
输入:AAAAAAAAAA
次数:300
症状:文本内容没有全部输出,程序正常结束
求助各位
cyxcw1 2009-10-11
  • 打赏
  • 举报
回复
关注下此贴!
文本处理的我也摸不着头脑
icemoon1987 2009-10-11
  • 打赏
  • 举报
回复
if(m==len/2)
{
fflush(stdin);
clearerr(stdin);
}

试试每次读取或写入后都刷新一下缓冲区?
icemoon1987 2009-10-11
  • 打赏
  • 举报
回复
让程序在每次循环时都输出 m 的值,看看m 的变化是否正常?
ho121 2009-10-11
  • 打赏
  • 举报
回复
error: io.h: No such file or directory

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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