2016-04-10 7 views
-1
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int array[]; 
int arraySize = 460; 
int max; 

int array_size(int n) { 
    array[n]; 
} 
int read_from_array(int n){ 
    for(int i = 0; i <= arraySize-1;i++) 
     printf("%d|",array[i]); 
} 
int array_generator(int n) { 
    for(int i = 0; i <= n; i++) 
     array[i] = rand() % 1000; 
} 
int find_max(int n) { 
    for(int i = 0;i <= n-1;i++) 
    { 
     if(array[i] > max) 
      max = array[i]; 
    } 
    printf("\n%d",max); 
} 

int main(int argc, char** argv) { 

    srand(time(NULL)); 

    array_size(arraySize); 
    array_generator(arraySize); 
    //read_from_array(arraySize); 
    find_max(arraySize); 

    return 0; 
} 

イム学習と、この変数は< 460に設定されている場合、それは動作しますが、私はそれを大きくする際にランダムな配列 で最大の整数を見つけるために、このような何かをした、それを動作していません仕事はありません。 int arraySize = 460;Cランダムな配列の最大値は、適切に

なぜこれが起こっているのか、それをより良くする方法を知りたい。

+2

あなたは 'array_size [n]'は配列のサイズを設定すると思いますか?それはしません。つまり、配列は空であり、すべてのアクセスは未定義の動作です。 –

+0

'int array []'は 'int array [1];と同じです。 –

+0

@CoolGuy、あなたは' int * array'と同じものではないと確信していますか? (同様に、割り当てられた記憶域はなく、ただのポインタです。) – Tyler

答えて

2

たくさんのもの。

まず、配列は決して実際に割り当てられません。あなたはそれらのすべてのランダムな整数を...どこに知っているかに入れています。これを修正する簡単な方法は、配列宣言の後に[]に数値を入れることです。しかしこれを行うには、サイズは一定でなければならないので、サイズを設定するにはarraySizeのような変数を使うことはできません。ただし、プリプロセッサ#defineを使用することはできます。これと同じように:

#define ARRAY_SIZE 460 
int array[ARRAY_SIZE]; 

あなたarray_size関数は何もしません。

すべての関数はintを返すよう宣言されていますが、returnステートメントはありません。どちらかをvoidにするか、何かを返す。

maxfind_maxのローカル変数であり、ifステートメントで使用する前に値を指定する必要があります。

int find_max(int n) { 
    int max = array[0]; 
    for(int i = 0;i < n;i++) 
    { 
     if(array[i] > max) 
      max = array[i]; 
    } 
    printf("\n%d",max); 
    return max; 
} 

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

void array_init(int* array, int n) { 
    for(int i = 0; i < n; i++) { 
     array[i] = rand() % 1000; 
    } 
} 

int array_max(int* array, int n) { 
    int max = array[0]; 
    for(int i = 0;i < n;i++) 
    { 
     if(array[i] > max) { 
      max = array[i]; 
     } 
    } 
    return max; 
} 

int main(int argc, char** argv) { 
    srand(time(NULL)); 

    int array_size = 460; 
    int array[array_size]; 

    array_init(array, array_size); 
    int max = array_max(array, array_size); 
    printf("%d\n", max); 
    return 0; 
} 
+1

"arraySizeのような変数を使用してsize_を設定することはできません" - [Variable Length Arrays](https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html)で読む –

+1

私は、私は意識している。簡単に保つ方が良い。とにかく静的な(編集:「静的に割り当てられた」、例えばグローバルな)配列には適用されません。 http://stackoverflow.com/questions/15882650/c-static-array-with-length-defined-by-a-variable – Tyler

+0

#define ARRAY_SIZE anyvalueは良い習慣であるか、静的でなければなりません。int array [ 1000]。 – noissue

0

max初期化されることはありませんし、あなたの配列の最大値、次に大きい値WTH起動することがあります。それで、次のように初期化する必要があります:

#include <limits.h> 

int max = INT_MIN ; // Init. to smallest possible value. 
関連する問題