gpt4 book ai didi

c - 在 C 中使用宏对 3 个值进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:30 25 4
gpt4 key购买 nike

我尝试使用我在 SO 上找到的宏,但是,这段代码给出了一些错误:

#include <stdio.h>
#include <math.h>

#define SWAP(a,b) do {\
int tmp = a; \
a = b; \
b = tmp;} while(0)\

#define SORT(a,b,c) \
if(a > b) { SWAP(a,b) } else if(a > c) { SWAP(a,c) } else if (b>c) { SWAP(b,c) }

int main()
{
int a = 5, b = 2, c = 4;

printf("a = %d, b = %d, c = %d\n", a, b, c);

SORT(a,b,c);

printf("a = %d, b = %d, c = %d\n", a, b, c);

return 0;
}

但是,当我从 SWAP 宏中删除 do while 时,它起作用了,但给出的是 2,5,4 而不是 2,4,5

在 SWAP 宏中使用 do ... while 循环,我的代码给出了错误:

Untitled2.c||In function ‘main’:|
Untitled2.c|10|error: expected ‘;’ before ‘}’ token|
Untitled2.c|18|note: in expansion of macro ‘SORT’|
Untitled2.c|10|error: expected ‘}’ before ‘else’|
Untitled2.c|18|note: in expansion of macro ‘SORT’|
Untitled2.c|10|error: expected ‘;’ before ‘}’ token|
Untitled2.c|18|note: in expansion of macro ‘SORT’|
Untitled2.c|10|error: expected ‘}’ before ‘else’|
Untitled2.c|18|note: in expansion of macro ‘SORT’|
Untitled2.c|10|error: expected ‘;’ before ‘}’ token|
Untitled2.c|18|note: in expansion of macro ‘SORT’|
Untitled2.c|23|error: expected declaration or statement at end of input|
||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

编辑:

修改了代码,但是结果不对,代码给我的是2,5,4而不是2,4,5:

#include <stdio.h>
#include <math.h>

#define SWAP(a,b) do {\
int tmp = a; \
a = b; \
b = tmp;} while(0);

#define SORT(a,b,c) \
if(a > b) { SWAP(a,b); } else if(a > c) { SWAP(a,c); } else if (b>c) { SWAP(b,c) }


int main()
{
int a = 5, b = 2, c = 4;

printf("a = %d, b = %d, c = %d\n", a, b, c);

SORT(a,b,c);

printf("a = %d, b = %d, c = %d\n", a, b, c);

return 0;
}

最佳答案

您缺少 ;SWAP(a,c) 之后和 SWAP(b,c)SORT宏。

也在这里

#define SORT(a,b,c) \
if(a > b) { SWAP(a,b) } else if(a > c) { SWAP(a,c) } else if (b>c) { SWAP(b,c) }

使用 else是错的。为了将三个值排序为 a , bc ,应该是

#define SORT(a,b,c) \
{ \
if((a) > (b)) { SWAP(a,b); } \
if((a) > (c)) { SWAP(a,c); } \
if((b) > (c)) { SWAP(b,c); } \
}

编辑

已添加 ( )对于 a , bc因为它们可能代表复杂的表达式。

关于c - 在 C 中使用宏对 3 个值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34992926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com