关于C++中结构的一个小问题

sexman188 2004-04-29 08:46:00
#include <iostream.h>
#include <STRING.h>

struct Person
{
char name[20];
unsigned long id;
float salary;
};

Person allone[3]={{"tom",12345,339},
{"jack",13916,449},
{"john",27519,311}};
void main()
{
Person* Pa[3]={&allone[0],&allone[1],&allone[2]};
Person* temp;
for(int i=0;i<3;i++)
{
for(int j=0;j<=2-i;j++)
{
if (Pa[j]->salary>Pa[j+1]->salary)
{
temp=Pa[j];
Pa[j]=Pa[j+1];
Pa[j+1]=temp;
}
}
}
for(int k=0;k<3;k++)
{
cout<<(*Pa[k]).name<<" "<<(*Pa[k]).id<<" "<<(*Pa [k]).salary<<" "<<endl;
}
}

输出却是下面的结果
? 2 1.7448e-039
john 27519 311
tom 12345 339
请问问题出在哪里?
...全文
63 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwertasdfg123 2004-04-30
  • 打赏
  • 举报
回复
问题出在下面这句
当j = 2;
时,j+1 = 3;Pa[3]就 out of array。
for(int j=0;j<=2-i;j++)
{
if (Pa[j]->salary>Pa[j+1]->salary)
{
temp=Pa[j];
Pa[j]=Pa[j+1];
Pa[j+1]=temp;
}
}
allsword 2004-04-29
  • 打赏
  • 举报
回复
for(int j=0;j<2-i;j++)
allsword 2004-04-29
  • 打赏
  • 举报
回复
楼主的冒泡看起来怪怪的,
我本来以为错了,
但好像还是能实现泡泡的功能。
codelover 2004-04-29
  • 打赏
  • 举报
回复
冒泡排序的循环写错了
for(int i=0;i<2;i++)
{
for(int j=0;j<2-i;j++)
{
if (Pa[j]->salary>Pa[j+1]->salary)
{
temp=Pa[j];
Pa[j]=Pa[j+1];
Pa[j+1]=temp;
}
}
}

3个数排序,只要有两个陈底,第三个也就排好了,所以外层循环是2
里层循环是两两比较,所以是0到 2-i。
heibai520 2004-04-29
  • 打赏
  • 举报
回复
不是!你是FOR()操作数组有问题,应该是这样的!
你的程序是不是想要用冒泡来排序salary,
#include <iostream.h>
#include <string.h>

struct Person
{
char name[20];
unsigned long id;
float salary;
};

Person allone[3]={{"tom",12345,339},
{"jack",13916,449},
{"john",27519,311}};
void main()
{
Person* Pa[3]={&allone[0],&allone[1],&allone[2]};
Person *temp;
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)//这里应该是这样的吧!
{
if (Pa[j]->salary>Pa[j+1]->salary)
{
temp=Pa[j];
Pa[j]=Pa[j+1];
Pa[j+1]=temp;
}
}
}
for(int k=0;k<3;k++)
{
cout<<(*Pa[k]).name<<" "<<(*Pa[k]).id<<" "<<(*Pa [k]).salary<<" "<<endl;
}
}
allsword 2004-04-29
  • 打赏
  • 举报
回复
//e文VC6.0
//把你的与此相关的工程文件全干掉,重编译试试
#include <iostream.h>
#include <string.h>

struct Person
{
char name[20];
unsigned long id;
float salary;
};

Person allone[3]={{"tom",12345,339},
{"jack",13916,449},
{"john",27519,311}};
void main()
{
Person* Pa[3]={&allone[0],&allone[1],&allone[2]};
Person* temp;
for(int i=0;i<3;i++)
{
for(int j=0;j<=2-i;j++)
{
if (Pa[j]->salary>Pa[j+1]->salary)
{
temp=Pa[j];
Pa[j]=Pa[j+1];
Pa[j+1]=temp;
}
}
}
for(int k=0;k<3;k++)
{
cout<<(*Pa[k]).name<<" "<<(*Pa[k]).id<<" "
<<(*Pa[k]).salary<<" "<<endl;
}
}
sexman188 2004-04-29
  • 打赏
  • 举报
回复
你们用的是中文版还是英文版的,我用的是英文版的!难道是病毒影响了吗???
VF 2004-04-29
  • 打赏
  • 举报
回复
晕,啊我在Vc++中也出错啊xf 3289650 6.36831e-039
john 27519 311
tom 12345 339
Press any key to continue
allsword 2004-04-29
  • 打赏
  • 举报
回复
我的结果对不对?
allsword 2004-04-29
  • 打赏
  • 举报
回复
楼主是想让p1,p2,p3的salary从小到大,
好像没错,??????
sexman188 2004-04-29
  • 打赏
  • 举报
回复
我也是在VC下做的啊 我怎么就得到是这种结果呢?
allsword 2004-04-29
  • 打赏
  • 举报
回复
//在VC下得出
john 27519 311
tom 12345 339
jack 13916 449
Press any key to continue

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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