2014-03-05 36 views
1

這是一個家庭作業C程序沒有輸入任何for循環?

我的程序似乎沒有輸入任何for循環。在某一點上,我有main中的所有函數,並且在2個全局變量上運行,而無需通過引用或值傳遞,並且所有內容都正常工作。從那時起我已經將我的函數移出main,並且通過引用傳遞一個數組並將該數組的長度傳遞給每個函數,我得到了printf語句,這些語句在循環之外,但除此之外沒有任何其他語句執行。

根據GDB,我的程序退出,退出代碼爲046

該程序很簡單,它需要一個值來設置我的數組長度,然後提示用戶輸入整數值來填充該數組。然後我排序數組,然後打印數組,最後我打電話getMax(int *array, int n)將最大的值打印到屏幕上。

輸出的一個例子是:

Enter the number of elements to be sorted: 
3 
Enter 10 integers in any order: 
2 
1 
4 
Inside sortArray 
Inside sort and print 
inside setMAx 
The largest value in the array is: 0 

我似乎已經打破了東西,我從未與它搞砸。這是我的嘗試。

謝謝你的任何幫助,我會坐在這裏試圖找到我的錯誤。

#include <stdio.h> 

void printArray (int *array, int n); 
void sortArray (int *array, int n); 
void fillArray (int *array, int n); 
void getMax (int *array, int n); 

int main(void){ 

    int array[10],n = 0; 

    fillArray (array, n); 
    sortArray (array, n); 
    printArray (array, n); 
    getMax  (array, n); 

    return 0; 
} 

void sortArray(int *array,int n){ 
    printf("Inside sortArray\n"); 

    int temp, c = 0, c2; 
    for(c=0;c<n;c++){ 
     printf("inside for loop SA\n"); 
     for(c2=c;c2<n;c2++){ 
      if(array[c]>array[c2]){ 
      temp=array[c]; 
      array[c]=array[c2]; 
      array[c2]=temp; 
      } 
     } 
    } 
} 

void printArray (int *array, int n){ 
    int c = 0; 
    printf("Inside sort and print\n"); 
    for(c=0;c<n;c++){ 
      printf("\t%d",array[c]); 
    } 
    printf("\n"); 
} 

void fillArray (int *array, int n){ 
    int c = 0; 
    printf("Enter the number of elements to be sorted:\n"); 
    scanf("%d",&n); 
    printf("Enter 10 integers in any order: \n"); 
    for(c=0;c<n;c++){ 
     scanf("%d", &array[c]); 
    } 
} 

void getMax (int *array, int n){ 
    printf("inside setMax\n"); 
    int temp = 0, i = 0; 

    for (i = 0;i<n;i++){ 
     printf("temp: %d", temp); 
     if(array[i]>temp) 
     temp=array[i]; 
    }  
    printf("\nThe largest value in the array is: %d\n", temp); 
} 

回答

1

void fillArray (int *array, int n)不更新的n值。您應該通過n作爲指針,給fillArray以下簽名:void fillArray (int *array, int *n)

然後,在fillArray的內部,您將使用*n修改它的值或n而不是&n

最後,在撥打fillArray時,您會撥打電話&n

+0

或者在'返回返回'N'值'語句,並更改'fillArry()'函數的類型,以便返回一個'int'。 –

+1

這兩個答案都對我有幫助,但我遇到了另一個問題,再次閱讀這個答案時也解決了這個問題,所以這是我選擇的答案。感謝大家!我已經修好了。 –

3

傳遞地址nfillArray()函數,以便在main()中獲得用戶想要輸入的元素數量。

稱其爲

fillArray (array, &n); 

把它定義爲

void fillArray (int *array, int *ptr_n){ 
    int c = 0, n =0; 
    printf("Enter the number of elements to be sorted:\n"); 
    scanf("%d",&n); 
    printf("Enter 10 integers in any order: \n"); 
    for(c=0;c<n;c++){ 
     scanf("%d", &array[c]); 
    } 
    //set ptr_n 
    *ptr_n = n; 
} 

您也可以從fillArray()返回n強似指針它。

n = fillArray (array, n); 

按值將它定義爲

int fillArray (int *array, int n){ 
    int c = 0; 
    printf("Enter the number of elements to be sorted:\n"); 
    scanf("%d",&n); 
    printf("Enter 10 integers in any order: \n"); 
    for(c=0;c<n;c++){ 
     scanf("%d", &array[c]); 
    } 
    return n; 
} 
1

您路徑nfillArray,並簡單地初始化的n LoCall號碼副本0,所以當你退出功能,您n的主要功能仍0。您可以通過refernce

shold路徑 n
void fillarray(.... int* n) 
    { 

     .... 
     scanf("%d",n); 
    } 

甚至更​​好的只是返回n的fillarray

n = fillarray(int *array) 
1

您的通過N的主要功能被初始化爲0的所有其他職能。所以沒有任何循環正在工作,因爲當你用n檢查它時,它會失敗並退出循環。

在函數內聲明的變量(包括聲明爲參數變量)僅對該函數是本地的。

您讀取的值爲fillArray中的值n,其中僅在該函數處於範圍內纔有效。它不會被反射回主函數n(兩者都是不同的變量)。

你可以在主程序中讀取n的值,然後將其傳遞給其他函數。

如果您對指針概念的理解可以用於fillArray中的指針概念,所以n反射回主。

void fillArray (int *array, int *n)

fillArray (array, &n);

還一邊閱讀在scanf使用n&n,並在for循環*n