计算平均数,我的程序不知道哪里有问题

int n ;
int m = 0;
int number;
scanf("%d", &n);
do {
    scanf("%d", &number);
    if (number != 0) {
        m += number;
    }
} while (number != 0);
printf("%5.2f", 1.0 * m / n);
return 0;

}

你的n是干嘛的,如果是预先知道多少个数字,下面为什么又根据 number == 0 退出循环。
否则n也没用到啊

#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    int number;
    while (1) {
        scanf("%d", &number);
        if (number != 0) {
            m += number;
            n++;
        }
        else
        {
            break;
        }
    } 
    printf("%5.2f", 1.0 * m / n);
    return 0;
}

【以下回答由 GPT 生成】

你的代码中有一个明显的错误,导致了无法正确计算平均数的问题。

问题出在你在 scanf 函数后,没有进行错误检查。如果用户输入一个非数字的字符,那么 scanf 函数会失败,并且 number 变量的值将不会被更新,但是你的代码并没有处理这种情况。因此,number 的初始值(可能是垃圾值)将一直保持不变,导致了无法正确计算平均数。

为了解决这个问题,你可以通过判断 scanf 函数的返回值来检查用户输入是否成功。当用户输入无效时(即返回值不等于1),你可以使用 fgets 函数清空输入缓冲区,直到用户输入有效数据。然后,你可以再次尝试读取一个数字。

下面是修改后的代码示例:

#include <stdio.h>

int main() {
    int n;
    int m = 0;
    int number;

    printf("请输入数字个数:");
    scanf("%d", &n);

    int validInput = 0;
    do {
        printf("请输入一个数字:");
        validInput = scanf("%d", &number);

        if (validInput == 1 && number != 0) {
            m += number;
        } else {
            // 清空输入缓冲区
            char buffer[256];
            fgets(buffer, sizeof(buffer), stdin);
        }
    } while (validInput != 1 || number != 0);

    printf("平均值为:%.2f\n", 1.0 * m / n);

    return 0;
}

在修改后的代码中,我们使用了一个 validInput 变量来检查 scanf 函数的返回值。如果返回值不等于1,说明用户输入无效。如果用户输入无效,我们就清空输入缓冲区,然后再次尝试读取一个数字。这样,我们就可以确保只有当用户输入有效数字时才进行计算。

希望这可以解决你的问题。如果你有任何疑问,请随时追问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^