は、この方法を試してください。
#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();
}
基本的に、あなたのコード内で抱えている問題はup
、down
、right
、left
は、それらのすべてのローカル変数ですされ、彼らはfour_corners
機能にだけ見えます。別のスコープでscanfを実行しているときに、それらが正しく初期化されていると思われますが、実際にはそうではありません。 scanfのスコープとfour_corners
スコープにそれらを表示させたい場合は、それらを関数の引数として渡すか、グローバルにします。私はC scopesについてもっと読むことをお勧めします、そして、これはクリスタルになるでしょう。ハッピーコーディング!
出典
2017-04-01 15:06:50
BPL
最初にキャストしてから分割します。あなたはここで整数除算をしています –
@龍之介、彼はすでに最初にキャスティングしています。彼は整数ではなく浮動小数点を実行しています。キャスト演算子が除算演算子よりも優先順位が高くない場合でも、分母のキャスト演算子が必要な効果を持ちます。 –
あなたが提示したコードでは、 'up'、' down'、 'right'、および' left'はすべて初期化されていません。どのようにして、配列に格納されている値にどのような期待が持てますか? –