使用宏MINIMUM3

时间:2015-05-07 20:51:49

标签: c macros numbers

我必须创建一个代码来确定三个数值中最小的一个。 宏MINIMUM3应使用宏MINIMUM2(差异btwn两个数值)来确定最小数字。输入值来自用户输入。我对使用宏并不是很熟悉,而且我的教科书并没有真正帮助我展示他们如何协同工作来实现他们的功能。下面的代码是我目前正在进行的工作,但我在第3,13,16和20行遇到了错误。

#define MINIMUM2 (a,b) (a < b ? a:b)

#define MINIMUM3 (a,b,c) (MINIMUM2(a,b) c? MINIMUM (a,b) :c)

int main (void) {
    int x,y,z;
    int temp; 
    printf("Please enter three numbers\n");
    scanf("%d%d%d, &x&y&z);
    temp = MIN(x,y,z);
    printf("The smallest number entered is:\n");
    printf("%d", &temp);
    getchar ();
    return0;
}

2 个答案:

答案 0 :(得分:2)

您的代码中有几个问题:

  • MINIMUM3使用MINIMUM代替MINIMUM2
  • MINIMUM3的逻辑被打破
  • 您需要删除宏名称后的空格
  • 您错过了致电scanf
  • 的结束双引号和逗号
  • 您正在使用MIN代替MINUMUM3
  • 您正在将temp的地址传递给printf

以下是解决此问题的方法:

#define MINIMUM2(a,b) (a < b ? a:b)
#define MINIMUM3(a,b,c) (MINIMUM2(MINIMUM2(a,b),c))

int main (void) {
    int x,y,z;
    int temp; 
    printf("Please enter three numbers\n");
    scanf("%d%d%d", &x, &y, &z);
    temp = MINIMUM3(x, y, z);
    printf("The smallest number entered is:\n");
    printf("%d", temp);
    getchar ();
    return0;
}

Demo.

您可以通过将每个参数括在括号中来改进您的宏:

#define MINIMUM2 (a,b) ((a) < (b) ? (a) : (b))

答案 1 :(得分:0)

您对MINIMUM3宏的定义将导致语法错误。你应该尝试像

这样的东西
#define MINIMUM3(a, b, c) MINIMUM2(MINIMUM2(a, b), c)

#define MINIMUM3(a, b, c) MINIMUM2(a, MINIMUM2(b, c))

另请务必在MINIMUM3中致电main,而不是MIN