微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

问题:编译成功但结果错误

如何解决问题:编译成功但结果错误

我在geany上用C编码的程序应该以降序显示3输入的int,编译成功,但是它只显示最后一个数字和两个零,我的老师告诉我们使用函数,所以...我不知道我的代码有什么问题 ps:很抱歉,我希望在修复之前先检查所有这些内容

#include <stdio.h>
#include <stdlib.h>

int a1,b1;
int a,b,c;
int i,j,k;
int mv;

int maxvalue ( int a1,int b1){
    if (a1 > b1){
        return a1;
    }
    else {
        return b1;
    }
}
    
void order ( int a,int b,int c){
    int mv = maxvalue( a1,b1);
        
    if (a - mv == 0){
        i = a;
    }
    else if ( b - mv == 0){
        i= b;
    }
    else {
        i = c ;
    }
                    
    printf("%d\n",i);
                
    if (( a < i) && ( a-mv ==0)) {
        j=a;
    }
    else if (( b< i)&&( b - mv ==0 )) {
        j = b; 
    }
    else{
        j = c;
    }

    printf("%d\n",j);

    if (( a < j) && ( a - mv == 0)){
        k=a; 
    }
    else if (( b < j) &&(  b - mv ==0 )) {
        k = b; 
    }
    else{
        k = c;
    }

    printf("%d",k);
}

int main(int argc,char **argv)
{
    a = a1;
    b = b1;
    
    scanf("%d%d%d",&a,&b,&c);
    order(a,c);

    return 0;
}

解决方法

该问题的注释中指出的一个问题是局部变量遮盖了同名的全局变量,因此您应该研究SCOPE的概念。按照建议,将变量设置为LOCAL。

也。在orderint mv = (a1,b1);中:您声明了a1b1,但从未明确为其赋值。如果检查调用a1时的b1maxvalue是什么,您会发现它们将包含0,因为在C中,全局int将声明时自动为零。 (对于局部声明的变量,情况并非如此,在这种情况下,变量将被填充为无意义的位,直到初始化为止。由于a1b1不是您所期望的,因此mv不会符合您的期望,这很可能会破坏order其余部分中设计的逻辑。在使用之前,请务必确保已初始化局部变量或为其指定了值。

如果修改了maxvalue以选择输入的前两个数字中的最大值:选择i应该为哪个的逻辑可能会失败。因为mv始终是a or b之一,并且因为a - mv ==0b - mv之一始终为true,所以c永远不会分配给{{1 }},即使它是最高的,也不会先打印。

总之,

  • 使用局部变量,
  • 在使用任何变量之前将其初始化。
  • 确定可以重新评估i的逻辑 order将始终返回您期望的任何给定结果 输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?