2017-03-31 7 views
-2
void four_corners(float A[rows][columns]){ 
int up,down,right,left; 
int x=2; 
A[0][0]=(float)(up+left)/(float)(x); 
A[0][19]=(float)(up+right)/(float)(x); 
A[9][0]=(float)(down+left)/(float)(x); 
A[9][19]=(float)(down+right)/(float)(x);} 

私は4つの値を配列に挿入すると、正しい値が得られません。私のコードに何が問題なのですか?浮動小数点除算の結果がCで

+1

最初にキャストしてから分割します。あなたはここで整数除算をしています –

+2

@龍之介、彼はすでに最初にキャスティングしています。彼は整数ではなく浮動小数点を実行しています。キャスト演算子が除算演算子よりも優先順位が高くない場合でも、分母のキャスト演算子が必要な効果を持ちます。 –

+10

あなたが提示したコードでは、 'up'、' down'、 'right'、および' left'はすべて初期化されていません。どのようにして、配列に格納されている値にどのような期待が持てますか? –

答えて

1

は、この方法を試してください。

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

#define W 10 
#define H 20 

void four_corners(float A[W][H], int up, int down, int right, int left) { 
    int x = 2; 
    A[0][0] = (float)(up + left)/(float)(x); 
    A[0][19] = (float)(up + right)/(float)(x); 
    A[9][0] = (float)(down + left)/(float)(x); 
    A[9][19] = (float)(down + right)/(float)(x); 
} 

void print_board(float A[W][H]) { 
    for (int i = 0; i < W; i++) { 
     for (int j = 0; j < H; j++) { 
      printf("%.1f ", A[i][j]); 
     } 
    } 
} 
int main(int argc, char *argv[]) { 
    float A[W][H]; 
    memset(A, 0, W * H * sizeof(float)); 
    four_corners(A, 1, 2, 3, 4); 
    print_board(A); 
    getch(); 
} 

基本的に、あなたのコード内で抱えている問題はupdownrightleftは、それらのすべてのローカル変数ですされ、彼らはfour_corners機能にだけ見えます。別のスコープでscanfを実行しているときに、それらが正しく初期化されていると思われますが、実際にはそうではありません。 scanfのスコープとfour_cornersスコープにそれらを表示させたい場合は、それらを関数の引数として渡すか、グローバルにします。私はC scopesについてもっと読むことをお勧めします、そして、これはクリスタルになるでしょう。ハッピーコーディング!

関連する問題