注册 登录
编程论坛 C++教室

[新手求助]麻烦看下这个程序的问题

naski 发布于 2007-12-06 08:28, 832 次点击
问题:输入3个整数,将其从小到大排序后输出,要求用指针的方法完成。
试求解:
-----------------------------------------------------------------------------------------------------------
//对输入的3个整数从小到大排序后输出
#include<iostream>
using namespace std;
void swap_three(int *pa,int *pb,int *pc); //对3个整数进行从小到大的排序
void swap_two(int *pm,int *pn);           //交换两个整数
int main()
{
  int x,y,z;
  cout<<"input three number:"<<endl;
  cin>>x>>y>>z;
  swap_three(&x,&y,&z);
  cout<<"the new order is:"<<x<<" "<<y<<" "<<z<<endl;
   return 0;
}
void swap_three(int *pa,int *pb,int *pc)
{
  if(*pa>*pb)
  swap_two(pa,pb);
  if(*pa>*pc)
  swap_two(pa,pc);
  if(*pb>*pc)
  swap_two(pb,pc);
}
void swap_two(int *pm,int *pn)
{
  int t;
  t=*pm;
  pm=pn;
  *pn=t;
}
----------------------------------------------------------------------------------------------------------------
调试结果:
在c-free3.5和vc++6下均通过,但结果不对,例如:
----------------
输入:3 2 1
结果:3 3 3
----------------
输入:2 3 1
结果:2 3 3
----------------
求助:当中可能出现了什么问题?我也知道大概是实参的值在交换过程中出现了混乱,但暂时没找到原因。初学指针,有点困惑,谢谢大侠指点。
3 回复
#2
naski2007-12-06 08:46
找了半天,原来问题出现在swap_two函数中
void swap_two(int *pm,int *pn)
{
  int t;
  t=*pm;
  pm=pn; //修改为*pm=*pn;
  *pn=t;
}
#3
中学者2007-12-06 08:50
void swap_two(int *pm,int *pn)
{
  int t;
  t=*pm;
  pm=pn;  //改为*pm=*pn
  *pn=t;
}
#4
naski2007-12-06 08:59
谢谢楼上的热心解答,我明白了。
1