2011-09-27 65 views
0

返回我試圖寫入其中使用的功能來讀取在陣列中的數據,存儲的程序,並且然後試圖陣列返回到主()用於分類處理。 這裏就是我有訪問陣列內容從功能

 #include <stdio.h> 
    #include <stdlib.h> 
    #define RESERVED_ARRAY_SIZE 100 

    int* read_data_from_files() 
     { 
     int* arr = (int*) malloc(sizeof(int) * 50); 

     int arr_count; 
    int status; 
    int i,j ; 

    arr_count =0; 
    i=0; 
    FILE *cfPtr; 
    if ((cfPtr = fopen ("score.dat", "r"))== NULL) 
    { 
     printf("File cannot be opend\n"); 
     } 
    else 
    {   
     fscanf(cfPtr, "%d", &arr[i]); 
     printf("%5d%5d\n", i, arr[i]); 

     while (!feof (cfPtr)) 
     {     
      ++i; 
      ++arr_count; 
      status = fscanf(cfPtr, "%d", &arr[i]); 

      if (status == EOF) 
      { 
        break; 
        } 

     else if (status != 1) 
     { 
       fprintf (stderr, "Error input\n"); 
       getchar();     
       } 

     if (arr_count >= RESERVED_ARRAY_SIZE) 
     { 
         fprintf(stderr, " The number of array is over.\n"); 
         getchar();       
         } 

      printf("%5d%5d\n", i, arr[i]);    
     } 
     fclose (cfPtr); 
     } 
     printf("arr_count=%d\n", arr_count); 
    return arr; 
    } 

int main() 
{ 
    int i; 
    int arr_count; 
    int* arr = (int*) malloc(sizeof(int) * 10); 
    arr = read_data_from_files(); 
    arr_count = sizeof(arr)/sizeof(arr[0]); 
    printf("this check the size of array%d", arr_count); 
    for (i=0; i<9; i++) 
    { 
    printf("%d ", i); 
    printf("%d", *arr[i]); 
    } 
    selection_sort(arr, arr_count); 

    getchar(); 
    return 0; 
    } 

我的問題是 1.如果函數不能返回2倍的值,什麼shuold我在funcution數組的大小(我在程序的arr_count)傳遞給主()? 2.如果函數只返回數組的指針到main(),我可以計算出數組的大小嗎?我該怎麼辦 ? Thans很多爲您的助理。

+0

C和C++語言。我相信你選擇了前者。 –

+0

你不需要函數中的'i'和'arr_count';他們總是有相同的價值。而你的縮進讓你很難準確地讀取你的代碼;良好的縮進(並且完全排除製表符,特別是對於SO)使得讀取代碼變得容易。 –

+0

可惜您在數組中分配了50個條目,但使用RESERVED_ARRAY_SIZE(又名100)測試了溢出。你做一個溢出測試;不幸的是,你發現這個問題太遲了。一致性在編程中非常重要;始終使用RESERVED_ARRAY_SIZE會有所幫助。調試使用'enum {RESERVED_ARRAY_SIZE = 100};'可能會更好,因爲該符號將包含在調試符號表中(因此您可以執行'print RESERVED_ARRAY_SIZE'等),但宏值不會。 –

回答

0

不,你不能自動計算出大小。返回多個值的標準方法是將指針傳遞到您想要存儲額外的返回值的變量:

int* read_data_from_files(int *result_size) 
{ 
    ... 
    *result_size = arr_count; 
    ... 
    return arr; 
} 

int main() 
{ 
    int arr_count; 
    int *arr = read_data_from_files(&arr_count); 
    ... 
} 
0

你可以在主函數使一個變量size,並有函數調用通作爲附加論據的地址爲read_data_from_files()。然後read_data_from_files()可以修改函數內部的值,而不需要返回它。