C 如何获得正确打印的最小值?

C 如何获得正确打印的最小值?,c,C,这要求用户输入一个数字,如果该数字为正数,则输出该数字并将其添加到计数中,并输出计数的值(仅用于最近的输入值)。如果数字input为负数,则只要求输入一个新数字;如果输入为0,则输出整个程序运行的计数、最小值、最大值、总和和平均值 我已经完成了大部分工作,只是在获取0场景的最小值时遇到了麻烦。我还得到了int min #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() {

这要求用户输入一个数字,如果该数字为正数,则输出该数字并将其添加到
计数
中,并输出
计数
的值(仅用于最近的输入值)。如果数字
input
为负数,则只要求输入一个新数字;如果输入为0,则输出整个程序运行的计数、最小值、最大值、总和和平均值

我已经完成了大部分工作,只是在获取0场景的最小值时遇到了麻烦。我还得到了
int min

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

int main() {
    int input = 7;
    int count = 0;
    int sumInput = 0;
    int lastInupt = 0;
    int max;
    int min;
    double avg;

    while (input != 0) {
        printf("enter a number\n");
        scanf("%i", &input);
        if (input > 0) {
            count++;
            printf("\ninput = %i", input);
            printf("\ncount = %i\n", count);
            /*input1 = input;*/
            sumInput += input;
            //lastInupt = input;
        }
        else if (input < 0) {
            printf("\ninput = %i", input);
            printf("\ncount = %i\n", count);
        }
        if (input > lastInupt) {
            if (input > max) {
                max = input;
                /*input1 = input;*/
            }
        }
        if (lastInupt > input) {
            if (min > input){
                min = input;
            }
        }
        /*while (min > 0)
        {
        if (input < min) {
        min = input1;
        }
        }*/
    }
    avg = (float)sumInput / (float)count;
    printf("you have entered %i positive numbers..\n", count);
    printf("Sum of inputs: %i", sumInput);
    printf("\nThe maximum # is: %i", max);
    printf("\nThe average is: %.2lf", avg);
    printf("\nThe minimum # is: %i", min);
    getchar();
    getchar();
    return 0;
}
#包括
#包括
#包括
int main(){
int输入=7;
整数计数=0;
int输入=0;
int lastInupt=0;
int max;
int-min;
双平均值;
while(输入!=0){
printf(“输入数字”);
scanf(“%i”,输入(&i));
如果(输入>0){
计数++;
printf(“\n输入=%i”,输入);
printf(“\n计数=%i\n”,计数);
/*输入1=输入*/
输入+=输入;
//lastInupt=输入;
}
else if(输入<0){
printf(“\n输入=%i”,输入);
printf(“\n计数=%i\n”,计数);
}
如果(输入>最后输入){
如果(输入>最大值){
最大值=输入;
/*输入1=输入*/
}
}
if(lastInupt>输入){
如果(最小>输入){
最小值=输入;
}
}
/*而(最小值>0)
{
如果(输入<分钟){
最小值=输入1;
}
}*/
}
平均=(浮点)输入/(浮点)计数;
printf(“您已输入%i个正数..\n”,计数);
printf(“输入之和:%i”,sumpinput);
printf(“\n最大值为:%i”,最大值);
printf(“\n平均值为:%.2lf”,平均值);
printf(“\n最小值为:%i”,最小值);
getchar();
getchar();
返回0;
}

代码必须保持相同的通用格式这是我所在学院的作业。

由于您的运行时错误已修复,我将解决min==0的问题

当输入0时,如果语句
input>0
input<0

但是它仍然会尝试最后两个if语句,当然0将小于当前的min,因此它会将min设置为0(错误)

您需要做的是将其置于
else if(输入<0)
块之后

else{//input is 0
   break;
}

因此,当输入为0时,如果输入低于最小值,它将跳过检查。因为您想在此时中断循环。

考虑同时初始化最小值和最大值,并跳过最后一个输入变量

int min = INT_MAX;
int max = INT_MIN;

.....

if (input > max) 
   max = input;

if (min > input)
    min = input;
这应确保始终初始化最小值和最大值,并且在第一个也是唯一一个输入为0的特殊情况下,最小值和最大值都将得到值0

由于您将
min
初始化为
MAX\u INT
(INT变量的最高可能值),因此第一次迭代
min>输入将始终计算为true,并且
min
将被更新。类似于
max
MIN\u INT

如果输入时仅应更新最小值和最大值=0,然后将整个程序修改为

int main() {
    int input = 7;
    int count = 0;
    int sumInput = 0;
    int max = INT_MIN;
    int min = INT_MAX;
    double avg;

    while (input != 0) {
        printf("enter a number\n");
        scanf("%i", &input);
        if (input > 0) {
            count++;
            printf("\ninput = %i", input);
            printf("\ncount = %i\n", count);

            sumInput += input;
            if (input > max ) max = input;
            if (input < min ) min = input;
        }
        else if (input < 0) {
            printf("\ninput = %i", input);
            printf("\ncount = %i\n", count);
        }       
    }
    if(count==0) { // only 0 entered.
       printf("inform user she didnt enter any positive numbers");
    } else   {
      avg = (float)sumInput / (float)count;
      printf("you have entered %i positive numbers..\n", count);
      printf("Sum of inputs: %i", sumInput);
      printf("\nThe maximum # is: %i", max);
      printf("\nThe average is: %.2lf", avg);
      printf("\nThe minimum # is: %i", min);
    }
    getchar();
    getchar();
    return 0;
} 
intmain(){
int输入=7;
整数计数=0;
int输入=0;
int max=int_MIN;
int min=int_MAX;
双平均值;
while(输入!=0){
printf(“输入数字”);
scanf(“%i”,输入(&i));
如果(输入>0){
计数++;
printf(“\n输入=%i”,输入);
printf(“\n计数=%i\n”,计数);
输入+=输入;
如果(输入>最大值)最大值=输入;
如果(输入<最小值)最小值=输入;
}
else if(输入<0){
printf(“\n输入=%i”,输入);
printf(“\n计数=%i\n”,计数);
}       
}
如果(计数==0){//只输入0。
printf(“通知用户她没有输入任何正数”);
}否则{
平均=(浮点)输入/(浮点)计数;
printf(“您已输入%i个正数..\n”,计数);
printf(“输入之和:%i”,sumpinput);
printf(“\n最大值为:%i”,最大值);
printf(“\n平均值为:%.2lf”,平均值);
printf(“\n最小值为:%i”,最小值);
}
getchar();
getchar();
返回0;
} 

只需在“if input<0”案例后再添加一个“else”。这将是输入==0的情况。我遇到的问题是最小值没有计算,其他一切都正常工作。第一次输入后出现除I以外的运行时错误。尝试运行代码。这修复了运行时错误,但最小值仍然为0。是否删除了lastInput变量?如果输入为0,您是否应该更新最小值和最大值?两个问题都是?如果用户输入0,会发生什么情况?是否应更新最小值和最大值?如果没有,则将
(输入>最大)
(最小>输入)
移动到
if(输入>0)
块内。然后,您需要考虑在Primtf语句中使用什么来避免打印InthMax和Inmin。