利用链表无法读取文件

#include <stdio.h>
#include <tchar.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
#pragma warning(disable:4996)
#define pi 3.1415926

typedef struct point {
    int ID;            //点的ID
    double x, y, z;    //点的x,y,z
}Point;

/* TIN - 点三角形组织方式 */
typedef struct triangle_PT {
    int ID;        //三角形的ID
    int A, B, C;    //三角形的三个顶点
}Triangle_PT;
typedef struct TIN_PT
{
    Point *p;        //点集
    Triangle_PT *tris;    //边集
    int pointNum;        //点数
    int triNum;            //三角形个数
}TIN_PT; //点、三角形组织方式


int ReadTIN_PTFile(char *filename, TIN_PT *tin)
{
    int i,j;
    char fp[10000];
    tin->p = (Point *)malloc(sizeof(Point) * tin->pointNum);//这一步麻烦讲解一下是什么
    ifstream dm(filename);
    if (!dm)
    {
        printf("cannot got it\n");
        exit(0);
    }
    for (j = 1; j < 30; j++)
    {
        dm.getline(fp, 128, '\n');
        for (i = 1; i < 30; i++)
        {
            if (fp[i] == '\0')
                break;
            if (fp[i] == ',')
                fp[i] = ' ';
        }
        sscanf_s(fp, "%s %lf %lf %lf", &tin->p[j].ID, &tin->p[j].x, &tin->p[j].y, &tin->p[j].z);
    }
    return 1;
}



int main()
{
    TIN_PT tin1;
    ReadTIN_PTFile("C:\\Users\\86159\\Desktop\\get\\TIN数据.txt", &tin1);//自行修改路径
    system("pause");
    return 0;
}

无法读取文件,老是中断,不知道问题出在哪里,麻烦讲解一下(标注的地方也讲解一下)
文件网盘(供调试使用):链接: https://pan.baidu.com/s/1Jvz5zeaG1FPeDGTBWPc_Cg?pwd=cg8j
提取码: cg8j

注释的那一行是给p申请内存空间,空间大小是sizeof(Point) * tin->pointNum
你的代码修改如下(修改的地方有注释,另外,你的数据文件名改成英文,先不要带汉字):
修改后的运行结果:

img

代码:

#include <iostream>
#include <fstream>
using namespace std;
#pragma warning(disable:4996)
#define pi 3.1415926

typedef struct point {
    int ID;            //点的ID
    double x, y, z;    //点的x,y,z
}Point;

/* TIN - 点三角形组织方式 */
typedef struct triangle_PT {
    int ID;        //三角形的ID
    int A, B, C;    //三角形的三个顶点
}Triangle_PT;
typedef struct TIN_PT
{
    Point *p;        //点集
    Triangle_PT *tris;    //边集
    int pointNum;        //点数
    int triNum;            //三角形个数
}TIN_PT; //点、三角形组织方式


int ReadTIN_PTFile(char *filename, TIN_PT *tin)
{
    int i,j;
    char fp[10000];
    tin->p = (Point *)malloc(sizeof(Point) * tin->pointNum);//这一步麻烦讲解一下是什么
    ifstream dm(filename);
    if (!dm.is_open())
    {
        printf("cannot got it\n");
        exit(0);
    }
    for (j = 0; j < 30; j++) //修改 从0开始
    {
        dm.getline(fp, 128, '\n');
        for (i = 0; i < 30; i++) //从0开始
        {
            if (fp[i] == '\0')
                break;
            if (fp[i] == ',')
                fp[i] = ' ';
        }
        //修改
        sscanf_s(fp, "P%d %lf %lf %lf", &tin->p[j].ID, &tin->p[j].x, &tin->p[j].y, &tin->p[j].z);
    }
    dm.close();
    return 1;
}



int main()
{
    TIN_PT tin1;
    tin1.pointNum = 30; //修改,初始化pointNum的值
    ReadTIN_PTFile("D:\\TIN.txt", &tin1);//自行修改路径
    
    //测试
    for (int i = 0;i<30;i++)
    {
        printf("%d %lf %lf %lf\n",tin1.p[i].ID,tin1.p[i].x,tin1.p[i].y,tin1.p[i].z);
    }


    system("pause");
    return 0;
}


33行是在开辟堆内存

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632