如何获得最小打印量才能正常打印?

时间:2019-11-14 19:44:35

标签: c

这应该是要求用户输入一个数字,如果该数字是正数,它将输出该数字并将一个数字加到count并输出值count(仅适用于最新输入值)。如果数字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;
}

代码必须保持与我的大学作业相同的通用格式。

2 个答案:

答案 0 :(得分:1)

考虑同时初始化min和max并跳过lastInput变量。

int min = INT_MAX;
int max = INT_MIN;

.....

if (input > max) 
   max = input;

if (min > input)
    min = input;

这应该确保始终对min和max进行初始化,在特殊情况下,第一个也是唯一的输入为0时,min和max都将获得值0。

因为您将min初始化为MAX_INT(int变量的最大可能值),所以第一次迭代min > input将始终为true,并且min将被更新。与maxMIN_INT

类似

如果在输入!= 0时仅应更新min和max,则将整个程序修改为

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;
} 

答案 1 :(得分:0)

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

输入0时,如果语句input>0input < 0的第两个if失败,则

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

您需要做的是将此内容放在else if(input < 0)块之后

else{//input is 0
   break;
}

因此当输入为0时,它将跳过检查输入是否低于最小值。因为无论如何您都希望在这一点上脱离循环。