C 选择最大数并将其平方或立方时的结果不正确

C 选择最大数并将其平方或立方时的结果不正确,c,function,max,C,Function,Max,我希望这个程序选择最大的数字,然后根据用户的输入将其平方或放在立方体上。我知道有一个pow数学函数可以使用,但我正在尝试尽可能多地使用函数来掌握它的窍门。 我已经做了一个程序,它正确地显示了最大的数字,并且运行良好。我不想复制它,所以我从头开始写了它,现在我正在检查所有内容,它几乎是一样的,但即使对于MAX也显示了错误的结果。我需要修复什么 int max(int NUM1, int NUM2, int NUM3; ) { int NUM1, NUM2, NUM3; int X;

我希望这个程序选择最大的数字,然后根据用户的输入将其平方或放在立方体上。我知道有一个pow数学函数可以使用,但我正在尝试尽可能多地使用函数来掌握它的窍门。 我已经做了一个程序,它正确地显示了最大的数字,并且运行良好。我不想复制它,所以我从头开始写了它,现在我正在检查所有内容,它几乎是一样的,但即使对于MAX也显示了错误的结果。我需要修复什么

int max(int NUM1, int NUM2, int NUM3; )
{
    int NUM1, NUM2, NUM3;
    int X;
    if (NUM1 >= NUM2) {
        X = NUM1;
    } else {
        X = NUM2;
    }
    ;
    if (NUM3 >= X) {
        X = NUM3;
    }
    ;
    return X;
}

int square(int MAX)
{
    return MAX * MAX * MAX;
}

int cube(int MAX)
{
    return MAX * MAX;
}

int main()
{
    int NUM1, NUM2, NUM3, MAX;
    char A;
    printf("ENTER 3 NUMBERS: ");
    scanf("%d %d %d", &NUM1, &NUM2, &NUM3);
    MAX = max(NUM1, NUM2, NUM3);
    printf("LARGEST NUMBER: %d", MAX);
    printf("DO YOU WANT IT SQUARED OR CUBED? (S/C) ");
    scanf("%c", &A);
    if (A = "S") {
        printf("SQUARE: %d", square(MAX));
    } else {
        printf("CUBE: %d", cube(MAX));
    }
    return 0;
}


您的源代码中有几个错误和问题。如果您将警告级别设置为最大,您会发现大多数警告级别。尤其是作为初学者,您应该这样做,例如,对于GCC,请使用选项-Wall-Wextra和-pedantic

没有声明printf和scanf的include

max的参数列表后面有一个分号,至少会激怒GCC。叮当当当地抱怨着。它必须被移除

函数max具有参数和局部变量NUM1、NUM2和NUM3。后者是前者的影子,换句话说,您无法访问参数。此外,局部变量的值未定义

有一个分号的空语句;在《max》中的“如果”之后,它们不做坏事,而是打扰了不经意的读者

正方形和立方体的公式互换

在结果输出后添加一个换行符,如下所示:最大数字:%d\n以直观地分隔输出和以下提示

scanf使用起来相当棘手,最好避免使用。这是真实的,尤其是在阅读单个字符时。我必须在%c之前插入一个空格,以跳过数字输入行的换行

表达式A=S是指针const char*对字符char*的赋值。但是您想要比较两个字符,所以它必须是A=='S'。C区分字符文字和字符数组文字

为函数、参数和变量选择小写名称。正如其他人提到的,所有大写名称都是按照约定为常量保留的

请调整一个好的代码风格,如果你问你最喜欢的搜索引擎并坚持下去的话,它们有很多


我想你把正方形和立方体的函数互换了。乍一看,我发现你的正方形函数和立方体函数是相反的。另外,您尝试使用的最大数字是多少?int根据您的系统有限制。2^31或2^63,或者如果您使用的是16位micro,则可能只有2^15。我尝试编译该程序,但出现了4个错误。因此,我看不出它如何在MAX未编译时显示错误的结果。在修复语法错误后,查找变量阴影,并在启用一组正常警告的情况下进行编译。请注意,所有大写名称(如MAX)通常用于指示宏名或常量枚举值,偶尔用于类型名。它们不用于常规变量名。你最好遵守惯例;它使您的代码更易于阅读。这在形式上并不是错误的;这是不寻常的,它给有经验的读者发出了错误的提示。加油!谢谢,我会记住的。像1、4、5和6这样的东西只是简单的步骤,如果我睡一觉的话,这些步骤很容易避免!我正在看YT上FreeCodeCamp.org的教程,虽然这家伙解释得很好,但他并没有把我们学到的所有东西都结合起来。我通过自己做事情来学习,把所有东西都整合到一个程序中,然后一点一点地修补。我一直很高兴有像你们这样的人可以帮忙!