2013-03-02 57 views
0

我正在以下作業問題:C:故障排序包含用戶的整數數組元素輸入

構建一個使用一維陣列由用戶存儲10個號碼輸入的程序。輸入數字後,用戶應該看到一個菜單,其中有兩個選項可以按升序或降序對10個數字進行排序和打印。

我遇到了一些令人困惑的問題。

我的代碼張貼如下。我設法接受數組元素的用戶輸入,並且我在這裏找到了用於排序整數數組的代碼:http://www.java-samples.com/showtutorial.php?tutorialid=1577

該教程中的代碼工作得很好,但只要我在用戶指定的代碼中添加數組中的元素而不是僅僅自己初始化數組,我得到一個分段錯誤:運行程序時發生核心轉儲錯誤。它會工作,直到它擊中排序編程,然後崩潰。在gcc編譯時沒有錯誤。

#include<stdio.h> 
#include<stdbool.h> 

main() 
{ 
    int temporaryStorage; 
    int counter; 
    int numArray[] = {0}; 
    int i = 0; 
    bool sortExists = true; 

    for (i = 0; i < 10; ++i) 
    { 
     fprintf(stdout, "Enter element[%d]->", i); 
     fscanf(stdin, "%d", &numArray[i]); 
    } 

    printf("Array Before Sorting\n"); 
    for(counter = 0; counter < 10; ++counter){ 
     printf("%d ", numArray[counter]); 
    } 

    while (sortExists == true) 
    { 
     sortExists = false; 
     for (counter = 0; counter < 9; ++counter) 
     { 
      if (numArray[counter] > numArray[counter + 1]) 
      { 
       temporaryStorage = numArray[counter]; 
       numArray[counter] = numArray[counter + 1]; 
       numArray[counter + 1] = temporaryStorage; 
       sortExists = true; 
      } 
     } 
    } 

    printf("\n\nArray After Sorting – Ascending Order\n"); 
    for(counter = 0; counter < 10; ++counter){ 
     printf("%d ", numArray[counter]); 
    } 
} 
+0

請務必在C中指定main的返回類型,即使在舊標準中允許隱式鍵入也是如此。 – Zeta 2013-03-02 05:00:17

+0

我不完全確定你的意思,因爲到目前爲止,我們的文本並未涵蓋這些內容。這就是爲什麼我看到主要聲明如:int main()? – CDAGeek 2013-03-02 08:18:21

回答

3
int numArray[] = {0}; 

陣列不是動態尺寸在C.由於右手側基本上是一個int[1]您的陣列僅具有1的長度(長度從右側推導出)。您需要指定大小:

int numArray[10] = {0}; 

(提示進一步賽格故障:分段錯誤幾乎總是涉及到分配不足,超出範圍的訪問或懸擺指針)

0

我已經改正你的代碼並且工作正常。

#include<stdio.h> 
#include<stdbool.h> 

int main() 
{ 
    int temporaryStorage; 
    int counter; 
    int numArray[10]; 
    int i = 0; 
    bool sortExists = true; 

for (i = 0; i < 10; ++i) 
{ 
    fprintf(stdout, "Enter element[%d]->", i); 
    fscanf(stdin, "%d", &numArray[i]); 
} 

printf("Array Before Sorting\n"); 
for(counter = 0; counter < 10; ++counter){ 
    printf("%d ", numArray[counter]); 
} 

while (sortExists == true) 
{ 
    sortExists = false; 
    for (counter = 0; counter < 9; ++counter) 
    { 
     if (numArray[counter] > numArray[counter + 1]) 
     { 
      temporaryStorage = numArray[counter]; 
      numArray[counter] = numArray[counter + 1]; 
      numArray[counter + 1] = temporaryStorage; 
      sortExists = true; 
     } 
    } 
} 

printf("\n\nArray After Sorting – Ascending Order\n"); 
for(counter = 0; counter < 10; ++counter){ 
    printf("%d ", numArray[counter]); 
} 
return 0; 
}