C 使用定义的最大值

C 使用定义的最大值,c,C,任务是从用户处获取5个整数的输入,并使用#define 指令,找到最大值。现在,我已经使用define指令来定义常量,甚至更小的函数,但无法理解其背后的逻辑。我应该在#define中定义我的功能还是执行整个任务 #include <stdio.h> #define LARGEST(y) ((y[0]>y[1])?y[0]:y[1]) int main() { int i,y; int x[5]; for(i=0;i<5;i++){ pri

任务是从用户处获取5个整数的输入,并使用
#define
指令,找到最大值。现在,我已经使用define指令来定义常量,甚至更小的函数,但无法理解其背后的逻辑。我应该在
#define
中定义我的功能还是执行整个任务

#include <stdio.h> 
#define LARGEST(y) ((y[0]>y[1])?y[0]:y[1])
int main()
{
    int i,y;
    int x[5];
    for(i=0;i<5;i++){
    printf("Enter the value of X:\n");
    scanf("%d", &x[i]);}    
    int a=LARGEST(x);
    printf("%d", a);
}
#包括
#定义最大(y)((y[0]>y[1])?y[0]:y[1])
int main()
{
int i,y;
int x[5];

对于(i=0;i最大值的搜索可以按如下方式进行;宏和程序本身都不需要数组

#include <stdio.h> 
#include <limits.h>
#define LARGEST(x,y) ( (x) > (y) ? (x) : (y) )
int main()
{
    int a = INT_MIN;
    int i = 0;
    for(i=0; i<5; i++)
    {
        int x = 0;
        printf("Enter the value of X:\n");
        scanf("%d", &x);
        a = LARGEST(x, a);
    }    
    printf("%d", a);
}
#包括
#包括
#定义最大的(x,y)((x)>(y)?(x):(y))
int main()
{
int a=int_MIN;
int i=0;

对于(i=0;i从注释继续,您可以在每次输入时检查最大值,也可以将所有输入存储在一个数组中,然后循环数组中的每个值。第一种方法更简单:

#include <stdio.h>

#define MAX 5
#define LARGEST(a,b) ((a) > (b) ? (a) : (b))

int main (void)
{
    int largest = 0, n = 0, x;

    while (n < MAX) {
        int ret;
        printf ("enter value %d of %d: ", n + 1, MAX);
        ret = scanf ("%d", &x); /* validate conversion */
        if (ret == 1) {         /* input is valid */
            if (n)              /* not the first value */
                largest = LARGEST(largest,x);
            n++;
        }
        else if (ret == EOF) {  /* always check EOF */
            fprintf (stderr, "user canceled input.\n");
            return 0;
        }
        else {          /* input was not an integer */
            fprintf (stderr, "error: invalid input.\n");
            int c;      /* flush stdin to avoid loop */
            while ((c = getchar()) != '\n' && c != EOF) {}
        }
    }

    printf ("\nlargest: %d\n", largest);

    return 0;
}
#包括
#定义最大值5
#定义最大的(a,b)((a)>(b)?(a):(b))
内部主(空)
{
int最大值=0,n=0,x;
而(n

仔细检查一下,如果您有任何问题,请告诉我。

为什么不计算输入循环中的最大数字?您甚至不需要数组来存储每个数字。这个宏不是很有用,因为元素必须在数组中。最后3个元素都被您的代码忽略。您对数组没有太多经验,f我想我应该尝试像这样接受多个输入。无法计算考虑其他值的逻辑。赋值本身没有多大意义。请询问分配给您此任务的人。不要使用宏。@EdHeal我想是的;但是OP明确要求使用宏。您能解释部分代码吗?-为什么有限制。h inclulded?-变量a?是函数还是什么?@Hasan
限制。h
包含在
INT\u MIN
常量中。变量
a
包含当前最大值。宏使用产生其参数的最大值。第一次调用宏时y/a的值是多少?我们将使用第一个值<代码>x
(根据用户输入初始化)和
a=INT\u MIN
,可以用
INT
表示的最小数字。此初始化避免了第一次输入时的笨拙初始化。从未使用过“fprintf”函数,我可以跳过else中的部分吗?或者如果您可以详细说明一下。我将不胜感激!不,您不想跳过任何验证进行用户输入时的步骤。(从技术上讲,你可以——但这是一种不好的做法,因为据你所知,猫可能正在踩键盘)。
fprintf
printf
相同,只是它写入一个文件。在上面它写入
stderr
(其中
printf
只是写入
stdout
)。(您的3个标准文件流:
stdin
stdout
stderr
)。当您编写错误消息时,应将它们写入
stderr
,以便将程序输出和错误分离。花点时间让它们全部融入。C需要理解每个字符。如果出现除输入整数或用户通过生成手动
EOF
ctrl+d
在nix'es上,而
ctrl+z
在windoze上)取消输入。请尝试两个版本,看看哪个版本允许您实际恢复并输入5个值。