| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 401 人关注过本帖
标题:[新手求助]麻烦看下这个程序的问题
收藏  订阅  推荐  打印 
naski
Rank: 2
等级:注册会员
帖子:35
积分:522
注册:2007-7-5
[新手求助]麻烦看下这个程序的问题

问题:输入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
----------------
求助:当中可能出现了什么问题?我也知道大概是实参的值在交换过程中出现了混乱,但暂时没找到原因。初学指针,有点困惑,谢谢大侠指点。
搜索更多相关主题的帖子: int  整数  three  
2007-12-6 08:28
naski
Rank: 2
等级:注册会员
帖子:35
积分:522
注册:2007-7-5

找了半天,原来问题出现在swap_two函数中
void swap_two(int *pm,int *pn)
{
  int t;
  t=*pm;
  pm=pn; //修改为*pm=*pn;
  *pn=t;
}

    │      ∠_
丿亅\   ├─┤
            └─┘
2007-12-6 08:46
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3389
积分:34733
注册:2007-9-14

void swap_two(int *pm,int *pn)
{
  int t;
  t=*pm;
  pm=pn;  //改为*pm=*pn
  *pn=t;
}

汇编.....
2007-12-6 08:50
naski
Rank: 2
等级:注册会员
帖子:35
积分:522
注册:2007-7-5

谢谢楼上的热心解答,我明白了。

    │      ∠_
丿亅\   ├─┤
            └─┘
2007-12-6 08:59
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.061168 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved