求助:课后作业复制小甲鱼的代码运行结果不一样
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;
}
(见图片)
为什么会这么奇怪?? 你好,看起来你在复制代码时不小心遗漏了一些部分。以下是小甲鱼给的完整代码模板,你可以试着再复制一次,并确认是否有遗漏:
#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: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>
jackz007 发表于 2024-10-20 18:25
如果键盘输入语句这样写:
那么,键盘输入必须是这样:
已解决,感谢!!
页:
[1]