c 读取文件了 发生重大杯具了

tan625747 2010-04-29 02:25:14

//顶点,向量
typedef struct {
float x, y, z;
} VECTOR3;
// 三角形
typedef struct
{
VECTOR3 tri1;
VECTOR3 tri2;
VECTOR3 tri3;
}TRIANGLE;




TRIANGLE * tri;
FILE *fp;

tri = malloc (sizeof ( TRIANGLE ) ) ;


fp=fopen((char *)"1.txt","rb");
if(fp==NULL)
{
printf("Create a file failed!\n");
return ;
}
fread( & tri ,sizeof(tri ),1,fp);



1.txt 文件内容

24.7839 -3.7183 -20.1270
-5.7647 -5.5251 -56.4182
-19.0192 -20.7566 -13.4548

4.1736 -23.9672 -18.5331
-4.1736 -6.0328 -41.4669



竟然打不开文件,读取不出来,晕!
...全文
115 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tan625747 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 keiy 的回复:]

打不开文件:可能是路径问题
读不对内容:按你的程序肯定读不到正确的内容.
文件是文本型的,读的是结构型的
fread(&tri ,sizeof(tri ),1,fp);
文件要以二进制结构型存储才能读到正确的内容
那你这种文件结构,用fscanf就可以了
[/Quote]

谢4楼,

fscanf(ffp,"%f %f %f\n",&tri->tri1.x ,&tri->tri1.y,&tri->tri1.z);
fscanf(ffp,"%f %f %f\n",&tri->tri2.x ,&tri->tri2.y,&tri->tri2.z);
fscanf(ffp,"%f %f %f\n",&tri->tri3.x ,&tri->tri3.y,&tri->tri3.z);

fscanf(ffp,"%f %f %f\n",&l->point1.x ,&l->point1.y,&l->point1.z);
fscanf(ffp,"%f %f %f\n",&l->point2.x ,&l->point2.y,&l->point2.z);


用这样的方法读出来了
tan625747 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qvbnlaw 的回复:]

悲剧!!!我还以为读取文件的时候。。电脑烧掉了!!!呵呵!!!这个我很少用fread!!!!!呵呵!!
[/Quote]

那人用什么,条件是在c里面,不能用c++ 疯了

tan625747 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 huanmie_09 的回复:]

引用 8 楼 tan625747 的回复:
引用 7 楼 huanmie_09 的回复:

引用楼主 tan625747 的回复:
C/C++ code

//顶点,向量
typedef struct {
float x, y, z;
} VECTOR3;
// 三角形
typedef struct
{
VECTOR3 tri1;
VECTOR3 tri2;
VEC……
[/Quote]

如果是写的话,是先写的话,这个程序一点意义都没有、
是想直接读取1.txt 的坐标
huanmie_09 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tan625747 的回复:]
引用 7 楼 huanmie_09 的回复:

引用楼主 tan625747 的回复:
C/C++ code

//顶点,向量
typedef struct {
float x, y, z;
} VECTOR3;
// 三角形
typedef struct
{
VECTOR3 tri1;
VECTOR3 tri2;
VECTOR3 tri3;
}TRIANGLE;
……
[/Quote]
先用fwrite写,然后用fread读.要对应啊.
qvbnlaw 2010-04-29
  • 打赏
  • 举报
回复
悲剧!!!我还以为读取文件的时候。。电脑烧掉了!!!呵呵!!!这个我很少用fread!!!!!呵呵!!
ilwmin 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 localxiao 的回复:]

fread 读 txt文件...

fopen的参数还是rb

rb是用二进制方式读取
但是txt是文本格式

肯定读不出
[/Quote]
读出是没有问题的。
tan625747 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huanmie_09 的回复:]

引用楼主 tan625747 的回复:
C/C++ code

//顶点,向量
typedef struct {
float x, y, z;
} VECTOR3;
// 三角形
typedef struct
{
VECTOR3 tri1;
VECTOR3 tri2;
VECTOR3 tri3;
}TRIANGLE;




TRIA……

文件是不是放在……
[/Quote]

文件是放在源文件同一目录, 我测试了一下如果读取字符,没有问题


现在读取的是,结构体
huanmie_09 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 tan625747 的回复:]
C/C++ code

//顶点,向量
typedef struct {
float x, y, z;
} VECTOR3;
// 三角形
typedef struct
{
VECTOR3 tri1;
VECTOR3 tri2;
VECTOR3 tri3;
}TRIANGLE;




TRIA……
[/Quote]
文件是不是放在和源文件同一目录下?
fread( & tri ,sizeof(tri ),1,fp);是块读取。
需要跟fwrite对应,即先fwrite到文件,然后fread读取.
打开应该是二进制形式.
localxiao 2010-04-29
  • 打赏
  • 举报
回复
fread 读 txt文件...

fopen的参数还是rb

rb是用二进制方式读取
但是txt是文本格式

肯定读不出
tan625747 2010-04-29
  • 打赏
  • 举报
回复
谢谢上面的回答

发现能能打开了,可读取不结构体

int main()
{

TRIANGLE * tri;
LINE * l;

FILE *ffp;
char ch;


tri =( TRIANGLE *)malloc (sizeof ( TRIANGLE ) ) ;
l = malloc ( sizeof (LINE ));

ffp = fopen("1.txt","rb");
if( ffp != NULL)
{
fread( &tri ,sizeof( tri ),1,ffp);
fread( & l ,sizeof(l ),1,ffp);

if( tri->tri1 .x > 0.0001 && l->point1 .x >= 0.0001)
{
switch ( isLine_In_Triangel(tri,l) )
{
case 0: printf ( " 线段不是三角形里面 \n " );
break;
case 1: printf ( " 线段穿插三角形里面 \n " );
break;
}
}

fflush(ffp);
fclose(ffp);

}
getchar ();
return ;

}
柯本 2010-04-29
  • 打赏
  • 举报
回复
打不开文件:可能是路径问题
读不对内容:按你的程序肯定读不到正确的内容.
文件是文本型的,读的是结构型的
fread(&tri ,sizeof(tri ),1,fp);
文件要以二进制结构型存储才能读到正确的内容
那你这种文件结构,用fscanf就可以了
ilwmin 2010-04-29
  • 打赏
  • 举报
回复
只有一个可能,文件根本就不存在或者文件位置不对。
ImJaden 2010-04-29
  • 打赏
  • 举报
回复
细节问题吧,
typedef triangle *tra;
tri=(tra)malloc(sizeof(triangle));
malloc 向系统申请分配指定size个字节的内存空间;我写也不知道对不?反正是有指针在里面指向的。
再有就是没有把文件闭关。fclose(fp);
bEst_02 2010-04-29
  • 打赏
  • 举报
回复
fp=fopen((char *)"1.txt","rb");
为什么要加红色部分?去掉试试看

69,371

社区成员

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

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