2017-11-08 7 views
0

入力された5つの数字のうち最小の数を見つけるプログラムを書いてみたいと思います。私は関数getMinNumを使用したいときに固執していますが、次のようなエラーが表示されます: ']'トークンの前に期待される式 ポインタとの接続がわかっていますが、もちろん可能です。配列内の最小数を見つける

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

float getMinNum(float a[], int x); 
int main() 
{ 
    int n = 5; 
    int i; 
    float z[n]; 
    for(i=0; i<n; i++){ 
     scanf("%f", &z[i]); 
    } 

    printf("%6.2f", getMinNum(z[], n)); 
    return 0; 
} 

float getMinNum(float a[], int x) 
{ 
    int i, min = a[0]; 
    for(i=0; i<x; i++){ 
     if(min > a[i+1]){ 
      min = a[i+1]; 
     } 
    } 
    return min; 
} 
+2

注意として、それを呼び出す必要があります。あなたは 'a [0]'が 'min'のものと同じ値であることを知っています...まあ、 'min'が' float'であって 'int'でないならば、あなたはそうです。データを使う前に、 'fscanf()'がすべて成功したことを確認する必要があります。 VLA(可変長配列)も使用しています。害はありませんが、そうしていることに気づくべきです。 –

+0

具体的には、可変長配列を使用していることに注意してください。なぜなら、コンパイラでn = 0を設定できるからです。これは、@ ed-healの解決法を使った範囲外のメモリアクセスにつながります。 [0] 'は有効なメンバーです。 'z 'を' float z [5] 'で宣言すると、コンパイラはその前提を強制します。 – Matt

答えて

3

変数名に '[]'を追加しないでください。代わりの

:あなたは、配列外の値を使用することになりますa[i+1]

printf("%6.2f", getMinNum(z, n)); 
3

、その代わりにa[i]を使用します。

printf("%6.2f", getMinNum(z[], n)); 

を行います。

ので、コードが

float getMinNum(float a[], int x){ 

    int i; 
    float min = a[0]; // Min needs to be a float 
    for(i=1; i<x; i++){ // Do not need to check a[0] 

     if(min > a[i]){ 
      min = a[i]; 
     } 

    } 

    return min; 
} 

ように見えるそして、あなたは '1' I = `と` getMinNum() `でループを開始することができます

printf("%6.2f", getMinNum(z, n)); 
関連する問題