C最多四个错误答案

3df52oht  于 2023-08-03  发布在  其他
关注(0)|答案(3)|浏览(80)

我刚开始学习编程,我找不到我的代码有什么问题

#include <stdio.h>

int max_of_four(int a, int b, int c, int d) {
    if (a > b && a > c && a > d) {
        printf("%d",a);
    }
    if (b > a && b > c && b > d) {
        printf("%d",b);
    }
    if (c > a && c > b && c > d) {
        printf("%d",c);
    }
    if (d > a && d > b && d > c) {
        printf("%d",d);
    }
    return 0;
}

int main() {
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    
   return 0;
}

字符串
我试着输入3456但是输出是60

hzbexzde

hzbexzde1#

1.您混淆了printreturn
1.你打印了两次
1.如果你想在不同的行上打印数字,你必须在打印中添加一个\n。或者空格,如果你只想用空格分隔它们。但是仅仅用普通的printf("%d",number1); ...; printf("%d",number2);打印数字将打印两个数字,没有任何分离。这里printf("%d",6);printf("%d",0);打印60
max_of_four函数打印结果(6),但返回0。
然后main函数打印max_of_four(...)的值,即0(因为它返回0)。所以,毫不奇怪,打印出来的是6,然后是0,也就是60。
max_of_four不应该打印任何东西,因为你的意思是它是一个返回结果的函数。无论如何,这将是两次打印结果,即使它工作。它应该只返回结果。然后,由调用者(主函数)根据需要打印结果。
所以长话短说

#include <stdio.h>

int max_of_four(int a, int b, int c, int d) {
    if (a > b && a > c && a > d) {
        return a;
    }
    if (b > a && b > c && b > d) {
        return b;
    }
    if (c > a && c > b && c > d) {
        return c;
    }
    if (d > a && d > b && d > c) {
        return d;
    }
    return 0;
}

int main() {
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d\n", ans);
    
   return 0;
}

字符串
这是为了回答在你的例子中困扰你的问题。但是你的代码中还有其他问题。
例如,如果两个数字相等会发生什么?例如,如果输入为4 5 5 2
在这种情况下,函数将返回0,而不是5。但是,既然你在学习,我就让你想想如何纠正。

vcirk6k6

vcirk6k62#

但输出是60
更具体地说,输出是6 *,然后是 * 06输出如下:

printf("%d",d);

字符串
0的输出如下:

printf("%d", ans);


由于max_of_four函数 * 总是返回0*,因此实际上不需要捕获和输出该值。您可以删除第二个输出:

int main() {
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    max_of_four(a, b, c, d);
    return 0;
}


(At当然,在这一点上,max_of_four函数根本不需要返回任何东西。)
或者,如果你想让max_of_four函数返回最大值,那么用 return 代替 printing

int max_of_four(int a, int b, int c, int d) {
    if (a > b && a > c && a > d) {
        return a;
    }
    if (b > a && b > c && b > d) {
        return b;
    }
    if (c > a && c > b && c > d) {
        return c;
    }
    if (d > a && d > b && d > c) {
        return d;
    }
    return 0;
}

j13ufse2

j13ufse23#

我会这样实现它:

int max_of_two(int a, int b)
{
    return a > b ? a : b; 
}

int max_of_four(int a, int b, int c, int d)
{
    return max_of_two(max_of_two(max_of_two(a,b), c), d);
}

字符串
它还将生成更好的代码:https://godbolt.org/z/GsTPsbGWa
或者对于任意数量的参数(无参数除外):

int max_of_two(int a, int b)
{
    return a > b ? a : b; 
}

int max_of_many(size_t size, ...)
{
    va_list va;
    int max;

    va_start(va, size);
    max = va_arg(va, int);
    size -= 1;
    while(size--)
    {
        max = max_of_two(max, va_arg(va, int));
    }
    va_end(va);
    return max;
}


和用法

int main(void)
{
    printf("%d\n", max_of_many(1, 5));
    printf("%d\n", max_of_many(2, 5, 6));
    printf("%d\n", max_of_many(3, 5, 6, 7));
    printf("%d\n", max_of_many(4, 5, 6 ,7, 8));
    printf("%d\n", max_of_many(5, 5, 6, 7, 8, 9));
}

相关问题