使用 define 指令的 Square 不起作用

Square using define directive not working

我实现了一个平方定义指令,如下所示:

#include <stdio.h>

#define SQR(y) ((y)*(y))

int main() {
    int a;
    printf("Enter : ");
    scanf("%d",&a);
    a = SQR(a);
    printf("The square is: %d\n",SQR(a));
    return 0;
}

但是当我执行它时,我没有得到任何错误,但每次都给出错误的答案。

为什么输入是4次方而不是2次方?

因为您在代码中写了 ((a)*(a)) 两次。

a = SQR(a); //<-- Here a = a*a printf("The square is: %d\n",SQR(a)); //<-- and here print a*a

你将它平方两次。

在您的代码中:

a = SQR(a);
printf("The square is: %d\n",SQR(a));
  1. 这首先使a = a*a

  2. 现在你打印SQR((a*a)*(a*a)),或者a*a*a*a

您可以将 printf 中的 SQR(a) 替换为 删除 a = SQR(a)

试试这个:

#include <stdio.h>
#define SQR(y) ((y)*(y))

int main() {
    int a;
    printf("Enter : ");
    scanf("%d",&a);
    printf("The square is: %d\n",SQR(a));
    return 0;
}

你计算了两次平方。你先在这里 a 广场:

a = SQR(a);

然后,在 printf:

中再次对这个数字进行平方
printf("The square is: %d\n",SQR(a));

通过将上面的 printf 替换为:

来解决问题
printf("The square is: %d\n", a);

您误解了 c 宏 的用法。

您的宏定义没有问题。问题在于使用。

a = SQR(a);

在上一行中,您计算​​了 a 的平方并将结果再次分配给 a。所以在上面的行执行后 a 的值是输入值的平方。

然后在下一行中,您正在 a.

上调用宏
printf("The square is: %d\n",SQR(a)); 

然后打印 a 当前值的平方。该值不是您需要获得的值。

例如,如果您输入 2,您将得到 16,但您需要 4 作为答案。