使用宏时出错

编码器

我在处理数据的地方有此代码。这是一个代码厨师问题。我从用户那里得到了一系列输入,并对它们进行处理,以找出2个数字之间的最大差。但是,当我使用宏来获得最大差异时,它给了我一个错误的答案,而当我使用函数时(我当前已评论)就给出了正确的答案。这是代码。

#include <stdio.h>
#define mod(a,b)a>b?a-b:b-a
/*int mod(int a, int b)
{
    if(a>b)
        return a-b;
    else
        return b-a;
}*/
int main()
{
    int p1,o1=0;//player1
    int p2,o2=0;//player2
    int margin=0;//win margin
    int rounds;//number of rounds
    scanf("%d",&rounds);
    while(rounds--)
   {
        scanf("%d %d",&p1,&p2);
        o2+=p2;o1+=p1;
        if(mod(o1,o2)>mod(margin,0))
            margin=o1-o2;
    }
    if(margin<0)
        printf("%d %d\n",2,margin*-1);
    else
        printf("%d %d\n",1,margin);
    return 0;
}

我输入的样本输入是:

5
140 82
89 134
90 110
112 106
88 90

1此输入的预期答案是: 1 58

而当我使用宏进行计算时,它给出的输出看起来像这样:

2 3

为什么宏给出错误的答案。请代表代表们..预先感谢..

用户名

宏执行文本替换。结果,当它们“粘贴”到代码中时,可能会发生意外的副作用。您想将参数包装在括号中以获得正确的结果。

IE:

#define mod(a,b) ( ( a ) > ( b ) ? ( a ) - ( b ) : ( b ) - ( a ) )

这样可以确保所有被替换ab正确“分组”的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章