c语言最小值始终为0 [已关闭]

yks3o0rb  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(132)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
5天前关闭。
Improve this question
“min”重复输出零而不是实际的最小数字。不确定我在这方面哪里出了问题。任何提示都会有帮助。

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

int main()
{
    int marks,i=0,max,min,sum=0;
    float avg;
    for(i=0;i<2;i++)
    {

    printf("iNPUT marks %d:",i+1);
    scanf("%d",&marks);
    sum=sum+marks;
    if (marks>max)
        max=marks;
    if(marks<min)
        min=marks;
    }
    avg=sum/2;
    printf("marks:%.2f\n",avg);
    printf("max:%d\n",max);
    printf("min:%d\n",min);
    return 0;
}
1l5u6lss

1l5u6lss1#

您忘记初始化minmax
因此,当您再次比较marks这两个变量时,minmax的值是垃圾,调用 Undefined Behavior
更改此项:

int marks,i=0,max,min,sum=0;

更改为:

int marks, i = 0, max = INT_MIN, min = INT_MAX, sum = 0;

这些宏要求您包含limits.h库。
完整示例:

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

int main()
{
    int marks, i = 0, max = INT_MIN, min = INT_MAX, sum = 0;
    float avg;
    for(i=0;i<2;i++)
    {
        printf("Input marks %d:", i + 1);
        scanf("%d",&marks);
        sum=sum+marks;
        if (marks>max)
            max=marks;
        if(marks<min)
            min=marks;
    }
    avg=sum/2;
    printf("marks:%.2f\n",avg);
    printf("max:%d\n",max);
    printf("min:%d\n",min);
    return 0;
}

对于输入1和2,给出:

Input marks 1:Input marks 2:marks:1.00
max:2
min:1
1u4esq0p

1u4esq0p2#

您没有初始化minmax。当您将mark与这两个变量(包含垃圾)进行比较时,代码会调用未定义的行为。
您也可以在第一次迭代期间更改初始化最小值和最大值的循环:

for(i=0;i<2;i++)
{
    printf("iNPUT marks %d:",i+1);
    scanf("%d",&marks);
    sum=sum+marks;
    
    if(i==0){ // First iteration both values are the same
       max=marks;
       min=marks;
    }
    else{
       if(marks>max)
           max=marks;
       if(marks<min)
           min=marks;
    }
}

相关问题