2013-02-14 108 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; 
}