鱼C论坛

 找回密码
 立即注册
查看: 1795|回复: 2

[已解决]指针问题

[复制链接]
发表于 2019-11-16 16:45:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
例题:运用指针,实三个整数从大到小排列。

为什么按照小甲鱼讲的打了,编译后没有结果显示?

#include <stdio.h>

void main()
{
      void exchange(int *q1,int *q2,int *q3);
          
          int a,b,c,*p1,*p2,*p3;

          scanf("%d %d %d\n",&a,&b,&c);
        p1 = &a;
          p2 = &b;
          p3 = &c;

          exchange(p1,p2,p3);
          printf("%d %d %d\n",a,b,c);
}

void exchange(int *q1,int *q2,int *q3)//使得a>b>c
{
    void swap(int *pt1,int *pt2);

        if(*q1 < *q2)
        {
             swap(q1,q2);
        }
      if(*q1 < *q3)
        {
             swap(q1,q3);
        }
        if(*q2 < *q3)
        {
             swap(q2,q3);
        }

}

void swap(int *pt1,int *pt2)
{
     int temp;

      printf("Please waiting...\n");
         
        temp=*pt1;
      *pt1=*pt2;
      *pt2=temp;
}
最佳答案
2019-11-16 17:04:20
本帖最后由 jackz007 于 2019-11-16 17:08 编辑

          这句代码有问题,格式描述字符串中不能出现回车符 '\n'。最好也不要出现空格、逗号之类,总之,越简单越好,可以避免意外。
  1.           scanf("%d %d %d\n" , & a , & b , & c) ;
复制代码

          改成下面这样:
  1.           scanf("%d%d%d" , & a , & b , & c) ;
复制代码

          改完代码就没问题了

          我把楼主的代码简化了一下,谨供楼主参考:
  1. #include <stdio.h>

  2. void swap(int * pt1 , int * pt2)
  3. {
  4.         int temp                      ;
  5.         temp = * pt1                  ;
  6.         * pt1 = * pt2                 ;
  7.         * pt2 = temp                  ;
  8. }

  9. void exchange(int * q1 , int * q2 , int * q3)
  10. {
  11.         if(* q1 < * q2) swap(q1 , q2) ;
  12.         if(* q1 < * q3) swap(q1 , q3) ;
  13.         if(* q2 < * q3) swap(q2 , q3) ;
  14. }

  15. int main(void)
  16. {         
  17.         int a , b , c                       ;
  18.         scanf("%d%d%d" , & a , & b , & c)   ;
  19.         exchange(& a , & b , & c)           ;
  20.         printf("%d %d %d\n" , a , b , c)    ;
  21.         return 0                            ;
  22. }
复制代码

         
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-16 17:04:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-16 17:08 编辑

          这句代码有问题,格式描述字符串中不能出现回车符 '\n'。最好也不要出现空格、逗号之类,总之,越简单越好,可以避免意外。
  1.           scanf("%d %d %d\n" , & a , & b , & c) ;
复制代码

          改成下面这样:
  1.           scanf("%d%d%d" , & a , & b , & c) ;
复制代码

          改完代码就没问题了

          我把楼主的代码简化了一下,谨供楼主参考:
  1. #include <stdio.h>

  2. void swap(int * pt1 , int * pt2)
  3. {
  4.         int temp                      ;
  5.         temp = * pt1                  ;
  6.         * pt1 = * pt2                 ;
  7.         * pt2 = temp                  ;
  8. }

  9. void exchange(int * q1 , int * q2 , int * q3)
  10. {
  11.         if(* q1 < * q2) swap(q1 , q2) ;
  12.         if(* q1 < * q3) swap(q1 , q3) ;
  13.         if(* q2 < * q3) swap(q2 , q3) ;
  14. }

  15. int main(void)
  16. {         
  17.         int a , b , c                       ;
  18.         scanf("%d%d%d" , & a , & b , & c)   ;
  19.         exchange(& a , & b , & c)           ;
  20.         printf("%d %d %d\n" , a , b , c)    ;
  21.         return 0                            ;
  22. }
复制代码

         
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-16 18:11:58 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-17 00:53 编辑

我很好奇你是从哪里学的在函数里面声明函数的

  1. #include <stdio.h>
  2. int * _swap(int *m, int *n)//如果第一个指针指向的值小于第二个,则交换值,并返回较大值的地址
  3. {
  4.     if (*m < *n)
  5.     {
  6.         int t = *m;
  7.         *m = *n;
  8.         *n = t;
  9.     }
  10.     return m;
  11. }
  12. void _exchang(int *i, int *j, int *k)//按降序排序
  13. {
  14.     _swap(_swap(i, k),_swap(j, k));
  15. }
  16. int main(int argc, char const *argv[])
  17. {
  18.     int a = 2, b = 3, c = 6;
  19.     int *p1 = &a, *p2 = &b, *p3 = &c;
  20.     _exchang(p1, p2, p3);//或者 _exchang(&a, &b, &c)
  21.     printf("a = %d; b = %d; c = %d", a, b, c);
  22.     return 0;
  23. }
复制代码

-------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-3gsuyw3d.on5 --stdout=Microsoft-MIEngine-Out-kkaa2ebb.w2a --stderr=Microsoft-MIEngine-Error-ho2pxkuk.1vk --pid=Microsoft-MIEngine-Pid-jip22v2u.4rt --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
a = 6; b = 3; c = 2
E:\Users\admin\Documents\VScode>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 12:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表