2014-01-09 59 views
1

我已經編寫了下面的代碼來獲取我想輸入的數字作爲輸入,但是當我嘗試獲取它們並找到它們的平均值時,它無法正常工作。查找平均值

const int n; 
float max,min; 
int i,x=0,z=0; 
float ave[n]; 
printf("How many numbers do you want to enter?\n"); 
scanf("%d",&n); 

回答

7

您聲明瞭可變長度數組ave錯誤的地方。在得到輸入n後聲明它。並聲明nint而不是const int(否則修改const限定類型對象調用未定義行爲)。

int n; 
float max,min; 
int i,x=0,z=0; 
printf("How many numbers do you want to enter?\n"); 
scanf("%d",&n); 
float ave[n]; 
+2

@RoyDictus;該功能首先在C99中引入。它會工作。請參閱C99草稿的** 6.7.5.2數組聲明符**。 – haccks

4

變化const int n; to int n;
const int n;應該在定義時被初始化。您將n聲明爲const int,並且您試圖將數據存儲到從輸入中獲取的數據中。

2

的問題是,你聲明

float ave[n] 

你給ň值之前。所以ñ == 0,

要修復它,給ave[]一個更大的固定大小或閱讀ň後分配內存給它。

+2

所以n ==未定義,不一定爲0. – glglgl

3

您有兩種未定義行爲的情況。首先是你試圖修改一個常量(n是一個常量,不應該修改)。第二個是當你聲明數組時,你使用未初始化的n,它將爲零,因此創建一個零長度的數組,然後繼續寫入。

+1

如果n <= 0,還有三分之一。 –

0

您可以爲此創建動態數組。此處僅在運行時創建內存空間。相應的代碼段如下:

int* ave; 
ave = (int*)malloc(i*sizeof(int)); 
for (j=0;j<n;j++) 
    { 
    ave[j]=j;       // the pointer can be used as an array 
    printf("%d\n",ave[j]); 
    }