//数据结构
struct DataPoint
{
unsigned long d_Serial;
CString d_TideTime;
double d_TideLon;
double d_TideLat;
double d_TideHei;
DataPoint *next;
DataPoint()
{ //
d_Serial = 0;
d_TideTime = _T("");
d_TideLon = 0.0;
d_TideLat = 0.0;
d_TideHei = 0.0;
}
};
在头文件中这样定义的:
DataPoint *m_dot; //
在构造函数中定义:
m_dot = new DataPoint;
m_dot->next = NULL;
析构函数中这样释放内存
DataPoint *temp;
while (m_dot != NULL)
{
temp = m_dot;
m_dot = m_dot->next;
delete temp;
}
在赋值函数中这样赋值
Tdlg dlg; //这是自己创建的一个对话框
DataPoint *temp, *tempdata;
temp = m_dot;
unsigned long j = 0;
if (dlg.DoModal() == IDOK)
{
m_serial++; //类成员,已经在构造函数中初始化为0,这个没有什么含义
while (temp != NULL && j < m_serial - 1)
{
temp = temp->next;
j++;
}
tempdata = new DataPoint;
tempdata->d_Serial = m_serial;
tempdata->d_TideTime = dlg.m_time;
tempdata->d_TideLon = dlg.m_lon;
tempdata->d_TideLat = dlg.m_lat;
tempdata->d_TideHei = dlg.m_hei;
tempdata->next = temp->next;
temp->next = tempdata;
}
输出是这样的//不在赋值的那个函数中
DataPoint *temp;
temp = m_dot;
while (temp != NULL)
{
TRACE("%d %s %f %f %f \n", temp->d_Serial, temp->d_TideTime,
temp->d_TideLon, temp->d_TideLat, temp->d_TideHei);
temp = temp->next;
}
结果为什么会多了一行这样的值,第一个0后面应该还有一个字符(初始化赋值)
0 0.000000 0.000000 0.000000
1 1993.01.02.03.04 121.000000 22.000000 35.000000
为什么会多出前面的一行?我只进行了一次赋值啊!
struct DataPoint
{
unsigned long d_Serial;
CString d_TideTime;
double d_TideLon;
double d_TideLat;
double d_TideHei;
DataPoint *next;
DataPoint()
{ //
d_Serial = 0;
d_TideTime = _T("");
d_TideLon = 0.0;
d_TideLat = 0.0;
d_TideHei = 0.0;
}
};
在头文件中这样定义的:
DataPoint *m_dot; //
在构造函数中定义:
m_dot = new DataPoint;
m_dot->next = NULL;
析构函数中这样释放内存
DataPoint *temp;
while (m_dot != NULL)
{
temp = m_dot;
m_dot = m_dot->next;
delete temp;
}
在赋值函数中这样赋值
Tdlg dlg; //这是自己创建的一个对话框
DataPoint *temp, *tempdata;
temp = m_dot;
unsigned long j = 0;
if (dlg.DoModal() == IDOK)
{
m_serial++; //类成员,已经在构造函数中初始化为0,这个没有什么含义
while (temp != NULL && j < m_serial - 1)
{
temp = temp->next;
j++;
}
tempdata = new DataPoint;
tempdata->d_Serial = m_serial;
tempdata->d_TideTime = dlg.m_time;
tempdata->d_TideLon = dlg.m_lon;
tempdata->d_TideLat = dlg.m_lat;
tempdata->d_TideHei = dlg.m_hei;
tempdata->next = temp->next;
temp->next = tempdata;
}
输出是这样的//不在赋值的那个函数中
DataPoint *temp;
temp = m_dot;
while (temp != NULL)
{
TRACE("%d %s %f %f %f \n", temp->d_Serial, temp->d_TideTime,
temp->d_TideLon, temp->d_TideLat, temp->d_TideHei);
temp = temp->next;
}
结果为什么会多了一行这样的值,第一个0后面应该还有一个字符(初始化赋值)
0 0.000000 0.000000 0.000000
1 1993.01.02.03.04 121.000000 22.000000 35.000000
为什么会多出前面的一行?我只进行了一次赋值啊!
1.创建节点后没有赋初值,默认构造函数会给出0 0.000000 0.000000 0.000000 的初始值,0后面是空字符,看不见。
2.你创建一个节点后,并赋值1 1993.01.02.03.04 121.000000 22.000000 35.000000 ,然后你把它加到前一个节点的NEXT指针上
3.所以连表有两个节点,输出
0 0.000000 0.000000 0.000000
1 1993.01.02.03.04 121.000000 22.000000 35.000000
//在构造函数中定义:
m_dot = new DataPoint;//改为:
m_dot = NULL;
那这个链表不是没有头结点了?
其实还有一个办法可以让那个0代码消失,你在
DataPoint *temp;
temp = m_dot;
//加上这句 temp = temp->next;
while (temp != NULL)
{
TRACE("%d %s %f %f %f \n", temp->d_Serial, temp->d_TideTime,
temp->d_TideLon, temp->d_TideLat, temp->d_TideHei);
temp = temp->next;
}
这样你就可以得到完整的输出了!