文件问题,为什么第一次运行结果和第二次运行的结果会不一样的?

lilvhuiling 2011-06-15 08:47:27
如题,不知道是文件里面的数据有错还是输出有错,请各位大大帮忙看看,万分感谢!!
#include <stdio.h>
#include <stdlib.h>
#define N 200
int a[N];
void save(){
int i;
FILE *fp;
for(i = 0; i < N; ++i){
a[i] = 0;
}
for(i = 0; i < N; ++i){
a[i] = rand();
}
if((fp = fopen("rand.txt","w")) == NULL){
printf("error!\n");
}
for(i = 0; i < N; ++i){
if(fwrite(&a[i],sizeof(int),1,fp) != 1)
printf("error!\n");
}
fclose(fp);
}

int main(){
//save();
int i;
char c;
FILE *fp;
if((fp = fopen("rand.txt","r")) == NULL){
printf("error!!\n");
printf("格式化文件?(y/n)");
scanf("%c",&c);
if(c == 'y' || c =='Y'){
save();
fp = fopen("rand.txt","r");
}
else
return 0;
}
for(i = 0; i < N; ++i){
fread(&a[i],sizeof(int),1,fp);
}
for(i = 0; i < N; ++i){
printf("%d\t",a[i]);
}
return 0;
}
...全文
186 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
可乐崽 2011-06-17
  • 打赏
  • 举报
回复
save()调用之前先把文件关闭了试试吧!
aa1013911535 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lilvhuiling 的回复:]
引用 7 楼 jernymy 的回复:

运行没有啥问题了。
加了保护

C/C++ code

#include <stdio.h>
#include <stdlib.h>
#define N 200
int a[N];
int save(){ //jernymy
int i;
FILE *fp;
for(i = 0; i < N; ++i){
a[……
[/Quote]
为什么楼主在读、写文件的时候不加盘符了?难道是默认了?
srand(seed),建议楼主用此函数设定好种子,再试试看。。。
lilvhuiling 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jernymy 的回复:]

运行没有啥问题了。
加了保护

C/C++ code

#include <stdio.h>
#include <stdlib.h>
#define N 200
int a[N];
int save(){ //jernymy
int i;
FILE *fp;
for(i = 0; i < N; ++i){
a[i] = 0;
}
f……
[/Quote]
还是不行啊,就是第一次生成文件之后,第二次再运行时,打开文件显示文件信息时,就会显示出不同的数据了
jernymy 2011-06-15
  • 打赏
  • 举报
回复
运行没有啥问题了。
加了保护


#include <stdio.h>
#include <stdlib.h>
#define N 200
int a[N];
int save(){ //jernymy
int i;
FILE *fp;
for(i = 0; i < N; ++i){
a[i] = 0;
}
for(i = 0; i < N; ++i){
a[i] = rand();
}
if((fp = fopen("rand.txt","w")) == NULL){
printf("error!\n");
return -1; //jernymy
}
for(i = 0; i < N; ++i){
if(fwrite(&a[i],sizeof(int),1,fp) != 1)
printf("error!\n");
}
fclose(fp);
return 0; //jernymy
}

int main(){
//save();
int i;
char c;
FILE *fp;
if((fp = fopen("rand.txt","r")) == NULL){
printf("error!!\n");
printf("格式化文件?(y/n)");
scanf("%c",&c);
if(c == 'y' || c =='Y'){
save();
if ((fp = fopen("rand.txt","r")) == NULL ) //jernymy
{
return 0; //jernymy
}
}
else
return 0;
}
for(i = 0; i < N; ++i){
fread(&a[i],sizeof(int),1,fp);
}
for(i = 0; i < N; ++i){
printf("%d\t",a[i]);
}
return 0;
}
lilvhuiling 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lilvhuiling 的回复:]

引用 3 楼 bdmh 的回复:

你指的有错是什么错啊

第一次是正常的输出,就是这种情况
再运行一次就是这样情况了,出现了好多0
[/Quote]
图片显示不出来,我dao!!
lilvhuiling 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]

你指的有错是什么错啊
[/Quote]
第一次是正常的输出,就是这种情况
再运行一次就是这样情况了,出现了好多0
lilvhuiling 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fukang258369 的回复:]

fwrite(&a[i],sizeof(int),1,fp);和fread(&a[i],sizeof(int),1,fp);

a[i]前边加&干嘛?
[/Quote]
不用加的么,取地址啊
我不知道为什么不用加,我这边机子不加的话,就运行不了
bdmh 2011-06-15
  • 打赏
  • 举报
回复
你指的有错是什么错啊
fukang258369 2011-06-15
  • 打赏
  • 举报
回复
fwrite(&a[i],sizeof(int),1,fp);和fread(&a[i],sizeof(int),1,fp);

a[i]前边加&干嘛?
ryfdizuo 2011-06-15
  • 打赏
  • 举报
回复
a[i] = rand();
随机函数,当然不同了。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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