2013-02-14 110 views
2

我对C非常陌生,并且正在处理作业问题。我们需要编写一个程序,该程序需要用户输入10个数字,并输出平均值,最高值和最低值。我有什么看起来像正确的代码,但输出只是离开。这是我到目前为止C输入作业

#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; 
} 

如果有人可以给我一些洞察,我在做什么错我会真的很感激它。谢谢!

+1

你为什么不接受10号到整数数组本身。 – 999k 2013-02-14 04:30:09

回答

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); 


在C中,&运营商给你的变量(也称为指针)的地址。 scanf函数期望您将其指针传递给变量,因此它可以修改实际变量。另外,为了让你的代码稍微笨拙,你可能需要考虑摆脱所有这些变量,直接读入输入数组。

+2

+1也不要在格式化字符串中使用',',否则输入','分隔的数字 – 2013-02-14 04:29:01

0

请仔细阅读this manual,并回答:

  1. 什么样的价值呢scanf的期待与“%d”格式说明对应?
  2. int x; x的类型是什么?那么& x?
  3. 如果系统提示输入10个值,而我只输入9个值,然后输入“Ooops!”,那么scanf会返回什么?
  4. 继续从这种情况下,你会期望getchar()返回什么?为了让scanf("%d", &num10);成功读取值,需要返回哪种类型的字符getchar()?
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; 
}