关于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
请问问题出在哪里?
...全文
30 12 点赞 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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

  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-04-29 08:46
社区公告
暂无公告