2

我对 C 非常陌生,并且正在解决家庭作业问题。我们需要编写一个程序,从用户那里接收 10 个数字,然后输出平均数、最高数和最低数。我有看起来像正确的代码,但输出就差很多了。这是我到目前为止所拥有的

#include <stdio.h>

int main() {
    int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10;

    printf("Enter 10 grades sperated by commas, then press enter: ");
    scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",num1,num2,num3,num4,num5,num6,num7,num8,&num9,&num10);getchar();

    int numbers[] = {num1,num2,num3,num4,num5,num6,num7,num8,num9,num10};

    int avg = (num1+num2+num3+num4+num5+num6+num7+num8+num9+num10)/10;

    printf("The average is: %d",avg);

    int high  = num1;
    for(int i=0; i<10; i++) {
        if (numbers[i] > high) {
            high = numbers[i];
        }
    }
    printf("The highest grade is: %d",high);

    int low = num1;
    for(int i=0; i<10; i++) {
        if (numbers[i] < low) {
            low = numbers[i];
        }
    }
    printf("The lowest number is: %d",low);

    return 0;
}

如果有人可以让我了解我做错了什么,我将不胜感激。谢谢!

4

3 回答 3

3

在您致电 时scanf,您不会获取每个numX. 当您将它们全部传递num9给. num10scanf

你想要的是:

scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",&num1,&num2,&num3,&num4,&num5,&num6,&num7,&num8,&num9,&num10);


在 C 中,&运算符为您提供变量的地址(也称为指针)。该scanf函数希望您将指针传递给变量,因此它可以修改实际变量。

此外,为了使您的代码不那么笨拙,您可能需要考虑摆脱所有这些numX变量并直接读取输入数组。

于 2013-02-14T04:26:17.153 回答
0

请阅读本手册并回答:

  1. scanf 期望什么类型的值与“%d”格式说明符对应?
  2. int x;x的类型是什么?&x 呢?
  3. 如果系统提示我输入 10 个值,而我只输入 9 个值,然后是“糟糕!”,scanf 会返回什么?
  4. 从那个场景开始,你期望 getchar() 返回什么?getchar() 需要返回哪种类型的字符才能scanf("%d", &num10);成功读取值?
于 2013-02-14T04:33:15.570 回答
0

首先,我将专注于关注点分离。创建一个读取输入的函数,另一个返回最小值的函数,另一个返回最大值的函数,然后是一个返回平均值的函数。此外,我可能会考虑使用数组来收集您尝试存储的所有数据,而不是声明一个巨大的变量池,从而避免所有输入。所以让我们原型化这个数组函数:

原型:

int* get_numbers(int* size); // should return a pointer to that array

执行:

int* get_numbers(int* size)
{
    int* numbers = NULL;

    // collect data...

    return numbers;
}
于 2013-05-09T04:18:40.180 回答