2016-04-04 46 views
2

myArrayとqは0を出力します。なぜその理由がわかりません。2次元配列の値

printf("Diameter: %f Flow rate: %f\n",myArray[rows][columns],q); 

プログラムでは流量が計算され、直径と流量値のテーブルを印刷しようとしています。

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

void printArray(float myArray[5][3], float v); 

int main() 
{ 
    float q, a, d, v, array[5][3]; 
    int rows, columns; 

    printf("Enter: "); 
    scanf("%f",&v); 

    for (rows = 0; rows < 5; rows++) 
    { 
     for (columns = 0; columns < 3; columns++) 
     { 
      printf("Enter value for %d, %d",rows,columns); 
      scanf("%d",&array[rows][columns]); 
     } 
    } 
    printArray(array, v); 

} 

void printArray(float myArray[5][3], float v) 
{ 
    int i, rows, columns; 
    float q, a; 

    for (rows = 0; rows < 5; rows++) 
    { 
     for (columns = 0; columns < 3; columns++) 
     { 
      a=(3.14*(myArray[rows][columns]*myArray[rows][columns]))/4; 
      q=a*v; 
      printf("Diameter: %f Flow rate: %f\n",myArray[rows][columns],q); 
     } 
    } 
    printf("\n"); 
} 
+1

1つの問題は、あなたがフロートにint型を読み込むことです。配列に読み込むscanfの書式指定子が間違っています。 – Pemdas

答えて

2
scanf("%d",&array[rows][columns]); 

あなたは未定義の動作である、floatにスキャンする%dを使用しています。代わりに%fを使用する必要があります。また、戻り値がscanfであることを確認して、何かが正常にスキャンされたことを確認する必要があります。 scanfは正常にスキャンされたアイテムの数を返します。その場合は1を返します。適切な入力がなかった場合は0を返し、入力を読み取る際にエラーがあった場合はEOFを返します。例えば

、あなたが持っている可能性があり:

if (scanf("%f", &array[rows][columns]) != 1) 
{ 
    fprintf(stderr, "Unable to read input\n"); 
    return 1; 
} 
+0

ありがとう、本当に助けてくれました。 – stc