请教一个有关于文件读写的问题?

wjhiat2003 2003-10-21 10:36:50
老师让我们编一个程序要求如下:
定义一个结构:struct frec
{
int uid;
char login[name+1];
}
用该结构存入20条记录到一个文件中去,然后从该文件中读出第2,5,7,8四条记录.
并显示在屏幕上..
我编的程序如下:
#include<stdio.h>
#define name 1
FILE *fp;
struct frec
{
int uid;
char login[name+1];
};
main()
{
struct frec use[19];
char filename[4];
int i;
printf("please input the filename:");
for(i=0;i<4;i++)
scanf("%c",filename[i]);
fp=fopen(filename
,"w");
printf("please input the frec data:");
for (i=0; i<20; i++)
scanf("%d%s",&use[i].uid,use[i].login);
for (i=0; i<20; i++)
fwrite(&use[i],sizeof(struct frec),1,fp);
for (i=0; i<20; i++)
{
if(i==2)
{
fread(&use[i],sizeof(struct frec),1,fp);
printf("%4d %10s\n",&use[i].uid,use[i].login);
}
if(i==5)
{
fread(&use[i],sizeof(struct frec),1,fp);
printf("%4d %10s\n",&use[i].uid,use[i].login);
}
if(i==7)
{
fread(&use[i],sizeof(struct frec),1,fp);
printf("%4d %10s\n",&use[i].uid,use[i].login);
}
if(i==8)
{
fread(&use[i],sizeof(struct frec),1,fp);
printf("%4d %10s\n",&use[i].uid,use[i].login);
}
}
}
这个程序编译是能通过的,但是一运行就显示,指针没定义...
反正就是不行的了.
请教各位C语言的高手,帮我看看,哪里错了?
...全文
29 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
arfi 2003-10-23
  • 打赏
  • 举报
回复
新的不会有错的。
可能是编译其不同的缘故吧,我是在98下VC6.0环境下运行的,那个老程序显示结果不正确。fread的时候报错。
wjhiat2003 2003-10-23
  • 打赏
  • 举报
回复
大哥.......原来那个可以的啊,你那个新的反而有错了!!!
你运行看一下啊
``
zlqian 2003-10-23
  • 打赏
  • 举报
回复
#include<iostream>
#include<cstdio>
using namespace std;

#define name 10
FILE *fp;
struct frec{
int uid;
char login[name+1];
};

int main(void)
{
struct frec use[20],bak;
char filename[50] = "c:\\log.txt";
int size=sizeof(frec);

fp=fopen(filename,"w");
// write file
for (int i=0; i<20; i++)
{
use[i].uid = rand();
itoa(rand(),use[i].login,10);
cout<<use[i].login<<endl;
}
fwrite(use,size,20,fp);
rewind(fp);
fread(use,size,20,fp);
cout<<use[2].login<<endl;
system("pause");
return true;

}
shenbinwangyy 2003-10-23
  • 打赏
  • 举报
回复
随便再提一下,个人观点,可能不对
我认为把,struct frec temp; 这句放到循环外面可能更好一些
shenbinwangyy 2003-10-23
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

#define name 10
FILE *fp;
struct frec
{
int uid;
char login[name+1];
};

void main(void)
{
struct frec use[20];
char filename[10];
int i, ret;

printf("please input the filename:");
scanf("%s", filename);
fp=fopen(filename, "w");
if(fp == NULL)
{
perror("Open file for write error");
exit(EXIT_FAILURE);
}
printf("please input the frec data:");
for (i=0; i<20; i++)
scanf("%d%s",&use[i].uid,use[i].login);
for (i=0; i<20; i++)
{
ret = fwrite(&use[i],sizeof(struct frec),1,fp);
if(ret != 1)
printf("Write error!!!\n");
}

fseek(fp,0L,SEEK_SET);

for (i=0; i<20; i++)
{
struct frec temp;

ret = fread(&temp,sizeof(struct frec),1,fp);
if(ret != 1)
printf("Read error!!!\n");

if(i==1 || i==4 || i==6 || i==7)
printf("%4d %10s\n",temp.uid,temp.login);

}
fclose(fp);
}
大哥,我试过啦,要不您也试试
arfi 2003-10-23
  • 打赏
  • 举报
回复
你试一下,好像不行的。
shenbinwangyy 2003-10-23
  • 打赏
  • 举报
回复
那是因为,文件的指针已经不在文件的开始位置啦,加上一句
fseek(fp,0L,SEEK_SET);就可以啦
wjhiat2003 2003-10-21
  • 打赏
  • 举报
回复
谢谢!!!
arfi 2003-10-21
  • 打赏
  • 举报
回复
#include<stdio.h>
#define name 1
FILE *fp;
struct frec
{
int uid;
char login[name+1];
};

void main(void)
{
struct frec use[20]; //定义为20个才对
char filename[4];
int i;

printf("please input the filename:");
scanf("%s", filename); //读入字符串
fp=fopen(filename, "w");
printf("please input the frec data:");
for (i=0; i<20; i++)
scanf("%d%s",&use[i].uid,use[i].login);
for (i=0; i<20; i++)
fwrite(&use[i],sizeof(struct frec),1,fp);
fseek(fp, 0, SEEK_SET); //写完后要重新定位到文件头,以便读出
for (i=0; i<20; i++)
{
if(i==1 || i==4 || i==6 || i==7) //第2,5,7,8个
{
fread(&use[i],sizeof(struct frec),1,fp);
printf("%4d %10s\n",use[i].uid,use[i].login);
}
}
}
Lastdrop 2003-10-21
  • 打赏
  • 举报
回复
应该将
printf("%4d %10s\n",&use[i].uid,use[i].login)
改为
printf("%4d %10s\n",use[i].uid,use[i].login)
daizh 2003-10-21
  • 打赏
  • 举报
回复
其余类推,你自己改吧
daizh 2003-10-21
  • 打赏
  • 举报
回复
scanf("%c",filename[i]);//应该为scanf("%c",&filename[i]);
arfi 2003-10-21
  • 打赏
  • 举报
回复
最后的读数据还是有问题,上面的程序fread没有执行成功,打印的只是原来的值罢了。试了很多次,好像只有把文件关闭然后重新打开读取才能成功。
#include <stdio.h>
#include <stdlib.h>

#define name 10
FILE *fp;
struct frec
{
int uid;
char login[name+1];
};

void main(void)
{
struct frec use[20];
char filename[10];
int i, ret;

printf("please input the filename:");
scanf("%s", filename);
fp=fopen(filename, "w");
if(fp == NULL)
{
perror("Open file for write error");
exit(EXIT_FAILURE);
}
printf("please input the frec data:");
for (i=0; i<20; i++)
scanf("%d%s",&use[i].uid,use[i].login);
for (i=0; i<20; i++)
{
ret = fwrite(&use[i],sizeof(struct frec),1,fp);
if(ret != 1)
printf("Write error!!!\n");
}
fclose(fp);
fp=fopen(filename, "r");
if(fp == NULL)
{
perror("Open file for read error");
exit(EXIT_FAILURE);
}

for (i=0; i<20; i++)
{
struct frec temp;

ret = fread(&temp,sizeof(struct frec),1,fp);
if(ret != 1)
printf("Read error!!!\n");

if(i==1 || i==4 || i==6 || i==7)
printf("%4d %10s\n",temp.uid,temp.login);

}
fclose(fp);
}

69,371

社区成员

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

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