鱼C论坛

 找回密码
 立即注册
查看: 1445|回复: 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'。最好也不要出现空格、逗号之类,总之,越简单越好,可以避免意外。
          scanf("%d %d %d\n" , & a , & b , & c) ;
          改成下面这样:
          scanf("%d%d%d" , & a , & b , & c) ;
          改完代码就没问题了

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

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

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

int main(void)
{          
        int a , b , c                       ;
        scanf("%d%d%d" , & a , & b , & c)   ;
        exchange(& a , & b , & c)           ;
        printf("%d %d %d\n" , a , b , c)    ;
        return 0                            ;
}
         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

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

int main(void)
{          
        int a , b , c                       ;
        scanf("%d%d%d" , & a , & b , & c)   ;
        exchange(& a , & b , & c)           ;
        printf("%d %d %d\n" , a , b , c)    ;
        return 0                            ;
}
         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我很好奇你是从哪里学的在函数里面声明函数的
#include <stdio.h>
int * _swap(int *m, int *n)//如果第一个指针指向的值小于第二个,则交换值,并返回较大值的地址
{
    if (*m < *n)
    {
        int t = *m;
        *m = *n;
        *n = t;
    }
    return m;
}
void _exchang(int *i, int *j, int *k)//按降序排序
{
    _swap(_swap(i, k),_swap(j, k));
}
int main(int argc, char const *argv[])
{
    int a = 2, b = 3, c = 6;
    int *p1 = &a, *p2 = &b, *p3 = &c;
    _exchang(p1, p2, p3);//或者 _exchang(&a, &b, &c)
    printf("a = %d; b = %d; c = %d", a, b, c);
    return 0;
}
-------------------------------------------------------------------------------------
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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 13:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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