2

因此,当我输入正数或正数和负数时,代码可以正常工作,但仅输入负数会导致浮点错误,我知道除以零会导致这种情况,但我正在按输入数潜水

#include <stdio.h>
int main()
{
    int integer, pos, neg;
    int poscounter, negcounter;
    integer = 0;
    pos = 0;
    neg = 0;
    poscounter = 0;
    negcounter = 0;

    do {
        printf("Please enter an integer:");

        scanf("%d", &integer);

        if (integer > 0) {
            pos += integer;
            poscounter++;
        }
        else
            neg += integer;
        negcounter++;

    } while (integer != 0);

    printf("Positive average: = %d", pos / poscounter);
    printf("Negative average: = %d", neg / negcounter);
}

所以输入 -3 -2 -1 0 的输出应该是“负均值:-2”

4

3 回答 3

1

这与输入 -3,-2,-1,0 一起崩溃,因为 if (integer > 0) 始终为假,因此 poscounter 不会在任何时候递增,因此在 while 循环后 poscounter 将为零。

printf("正平均值: = %d", pos / poscounter); 由于由零操作决定,将导致程序崩溃。

最好对分母进行 if 检查,并确保在使用 devide 操作之前它不为零:

if (0 != poscounter)
     printf("Positive average: = %d", pos / poscounter);

这将确保 printf 仅在 poscounter 为非零值时才在有效情况下执行。

于 2019-02-07T05:09:43.587 回答
1
#include <stdio.h>
int main()
{
    int integer, pos, neg;
    int poscounter, negcounter;
    integer = 0;
    pos = 0;
    neg = 0;
    poscounter = 0;
    negcounter = 0;

    do {
        printf("Please enter an integer:");

        scanf("%d", &integer);

        if (integer > 0) {
            pos += integer;
            poscounter++;
        }
        else if(integer < 0)    // Added else if for the logic as it was considering 0 as negative
        {
            neg += integer;
            negcounter++;
        }

    } while (integer != 0);
    printf("posc = %d\n", poscounter);      // Printed for confirmation
    printf("negc = %d\n", negcounter);      // Printed for confirmation

    /* Added these two ifs so that it can check any of the counters is not zero and it will not give (core dumped) */

    if(poscounter)
        printf("Positive average: = %d\n", pos / poscounter);
    if(negcounter)
        printf("Negative average: = %d\n", neg / negcounter);

        return 0;       // Adding this is a good practice
}

嘿,他们在逻辑上有点问题,因为当没有遇到正/负时,它是将表达式除以 0。此外,它将 0 视为负整数。请浏览评论可能会有所帮助

于 2019-02-07T04:07:01.703 回答
1

if (integer > 0)永远不会执行,所以poscounter永远不会增加,所以最后除法pos / poscounter不能工作。

于 2019-02-07T07:30:42.947 回答