ypsilon13579 发表于 2024-10-20 18:04:04

求助:课后作业复制小甲鱼的代码运行结果不一样

S1E21:指针 | 课后测试题及答案
https://fishc.com.cn/thread-71653-1-1.html
(出处: 鱼C论坛)

动动手第0题,我复制了小甲鱼给的答案:
#include <stdio.h>

int main(void)
{
      int a, b, c, t;
      int *pa, *pb, *pc;
      
      printf("请输入三个数:");
      scanf("%d%d%d", &a, &b, &c);
      
      pa = &a;
      pb = &b;
      pc = &c;
      
      if (a > b)
      {
                t = *pa;
                *pa = *pb;
                *pb = t;
      }
      
      if (a > c)
      {
                t = *pa;
                *pa = *pc;
                *pc = t;
      }
      
      if (b > c)
      {
                t = *pb;
                *pb = *pc;
                *pc = t;
      }
      
      printf("%d <= %d <= %d\n", *pa, *pb, *pc);
      printf("%d <= %d <= %d\n", a, b, c);
      
      return 0;
}


(见图片)

为什么会这么奇怪??

FishC 发表于 2024-10-20 18:04:12

你好,看起来你在复制代码时不小心遗漏了一些部分。以下是小甲鱼给的完整代码模板,你可以试着再复制一次,并确认是否有遗漏:

#include <stdio.h>

int main(void)
{
    int a, b, c, t;
    int *pa, *pb, *pc;

    printf("请输入三个数:");
    scanf("%d%d%d", &a, &b, &c);

    pa = &a;
    pb = &b;
    pc = &c;

    if (a > b)
    {
      t = *pa;
      *pa = *pb;
      *pb = t;
    }

    if (a > c)
    {
      t = *pa;
      *pa = *pc;
      *pc = t;
    }

    if (b > c)
    {
      t = *pb;
      *pb = *pc;
      *pc = t;
    }

    printf("从小到大排序为:%d %d %d\n", a, b, c);

    return 0;
}

确保:
1. 头文件`#include <stdio.h>`正确包含。
2. 完整的`printf`和`scanf`部分。
3. 比较和交换的逻辑部分没有遗漏。

如果仍然遇到运行结果不一致的问题,请检查是否有语法错误或编译时产生警告。希望这个回答能帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-10-20 18:25:24

本帖最后由 jackz007 于 2024-10-20 18:49 编辑

      如果键盘输入语句这样写:
       scanf("%d%d%d", &a, &b, &c) ;
      那么,键盘输入必须是这样:
1 5 3
      就是说,1 5 3 之间的分隔字符是空格,不可以使用逗号

      如果键盘输入语句是这样写的:
       scanf("%d,%d,%d", &a, &b, &c) ;
      那么,键盘输入才可以这样:
1,5,3
      通常情况下,为了避免不必要的麻烦,应该尽量选择前者,也就是以空格作为输入分隔符。
   
      此外,利用三目运算符可以大幅度简化代码:
#include <stdio.h>

int main(void)
{
      int a, b, c, t                                                         ;
      int *pa, *pb, *pc                                                      ;
      
      printf("请输入三个数:")                                             ;
      scanf("%d%d%d", &a, &b, &c)                                          ;
      
      pa = (a < b && a < c) ? & a : (b < a && b < c) ? & b : & c             ;
      pc = (a > b && a > c) ? & a : (b > a && b > c) ? & b : & c             ;
      pb = (b + c == * pa + * pc) ? & a : (a + c == * pa + * pc) ? & b : & c ;
      
      printf("%d <= %d <= %d\n", *pa, *pb, *pc)                              ;

      return 0;
}
      编译、运行实况:
D:\\C>cl x.c
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.31.31107 版
版权所有(C) Microsoft Corporation。保留所有权利。

x.c
Microsoft (R) Incremental Linker Version 14.31.31107.0
Copyright (C) Microsoft Corporation.All rights reserved.

/out:x.exe
x.obj

D:\\C>x
请输入三个数:1 5 3
1 <= 3 <= 5

D:\\C>

ypsilon13579 发表于 2024-10-21 12:38:45

jackz007 发表于 2024-10-20 18:25
如果键盘输入语句这样写:

      那么,键盘输入必须是这样:


已解决,感谢!!
页: [1]
查看完整版本: 求助:课后作业复制小甲鱼的代码运行结果不一样