c - 使用宏 MINIMUM3 的三个数字中最小的一个

标签 c macros numbers

我必须创建一个代码来确定三个数值中的最小值。 宏 MINIMUM3 应该使用宏 MINIMUM2(两个数值的差值)来确定最小的数字。输入值来自用户输入。我不太熟悉使用宏,我的教科书并没有真正帮助我展示它们如何协同工作以执行其功能的示例。下面的代码是我目前正在进行的工作,但我在第 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;
}

最佳答案

您的代码中有几个问题:

  • 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))

关于c - 使用宏 MINIMUM3 的三个数字中最小的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30111409/

相关文章:

c - 计算发生次数的有效方法

c - do while 1-4 菜单循环不断重复非数字输入

jQuery 验证输入类型数字

c++ - 如何在 Eclipse C++ 中重构/重命名宏

ruby 新手 : Counter with 5 digit numbers

python - 写从 0 到 1000000000 的数字

用glade编译一个简单的gtk程序

c - fgets 不等待键盘输入

c++ - 修改 TestAssert.h (cppunit) - 为什么包含的顺序对宏扩展很重要?

c - 宏中的 GCC 变量类型