C输入作业

时间:2013-02-14 04:20:38

标签: c input scanf

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

如果有人能给我一些洞察我做错的事情,我会非常感激。谢谢!

3 个答案:

答案 0 :(得分:3)

在致电scanf时,您没有采用每个numX地址。将num9num10全部传递给scanf时,您只需使用scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",&num1,&num2,&num3,&num4,&num5,&num6,&num7,&num8,&num9,&num10); &的地址。

你想要的是:

scanf


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

另外,为了使您的代码不那么笨拙,您可能需要考虑删除所有{{1}}个变量,然后直接读入输入数组。

答案 1 :(得分:0)

请阅读this manual并回答:

  1. scanf期望与“%d”格式说明符对应的值是什么类型?
  2. int x; x的类型是什么?怎么样&amp; x?
  3. 如果我提示输入10个值,我只输入9个值,然后输入“Ooops!”,scanf会返回什么?
  4. 从那个场景开始,你期望getchar()返回什么? getchar()需要返回哪种类型的字符才能使scanf("%d", &num10);成功读取值?

答案 2 :(得分: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;
}