0

我正在尝试编写一个程序来获取一堆数字,n >= 5 该程序要求用户输入 n 个非负数并计算最小值、最大值和数字的总和。如果用户输入负数,该函数会要求输入正数。我对第一个负数有疑问,任何线索以下代码有什么问题?

void main()
{
    int x;
    printf("Enter number:\n");
    scanf("%d", &x);
    if (x >= 5)
    {
        int max = 0, min, num1;
        printf("Enter numbers: \n");
        scanf("%d", &num1); //here was the error
        min = num1;
        int sum = num1;
        for (int i = 1; i < x; i++)
        {
            scanf("%d", &num1); 
            while (num1 < 0)
            {
                {
                    printf("Enter again number: /n");
                    scanf("%d", &num1);
                }
            }
            if (num1 > max)
                max = num1;
            else if (num1 < min)
                min = num1;
            sum += num1;
        }
        printf("The max number is %d, and the min is %d, and the sum is %d", max, min, sum);
    }
    else
        printf("invalid number!");
}

output:

Enter number:
8
Enter numbers:
-8
7
6
9
10
6
7
6
The max number is 10, and the min is -8, and the sum is 43


4

3 回答 3

0

我对第一个负数有疑问,任何线索以下代码有什么问题?

不要用特殊代码读取第一个数字,它缺少否定测试。像其他数字一样简化和阅读。

简单地从min,max极端开始。

#include <limits.h>

    ...
    int max = INT_MIN;
    int min = INT_MAX;
    int sum = 0;
    printf("Enter numbers: \n");
    for (int i = 0; i < x; i++) { // start at 0
        int num1;
        scanf("%d", &num1); 
        while (num1 < 0) {
            printf("Enter again number: /n");
            scanf("%d", &num1);
        }
        if (num1 > max)
            max = num1;
        // else if (num1 < min)
        if (num1 < min)
            min = num1;
        sum += num1;
    }
    printf("The max number is %d, and the min is %d, and the sum is %d", 
        max, min, sum);
于 2020-04-01T20:35:22.157 回答
0

您应该在接受用户输入后放置 while 以防止任何负数也在其中,而无需放置双重固化 prates

#include <stdio.h>

int  main()
{
    int x;
    printf("Enter number:\n");
    scanf("%d", &x);

    if (x >= 5)
    {
        int max = 0, min, num1,sum;

        printf("Enter numbers:\n");



        sum = 0;
        min = num1;

        for (int i = 1; i<=x; i++)
        {   
            scanf("%d",&num1); 

             while(num1<0)
        {
            printf("Enter again number: \n ");
            scanf("%d", &num1);
        }


            if (num1 > max)
               { max = num1;}
            if (num1<min)
               { min = num1;}

          sum += num1;
        }
        printf("The max number is %d, and the min is %d, and the sum is %d", max, min, sum);
    }
    else
        printf("invalid number!");


 return 0;
}
````````````  
于 2020-04-01T21:21:47.507 回答
0

检查是否min<0为其分配新输入的值num1

        for (int i = 1; i < x; i++)
        {
            scanf("%d", &num1);
            if (min < 0)
                min = num1;
            while (num1 < 0){
            //rest of the code}
         }
于 2020-04-01T18:51:31.987 回答