例えば4回とも
"1"
を入力すると。
↓このように表示されて欲しいのですが、
A点:(1,1)
B点:(1,1)
実際には
↓このようにA点のy座標が0で出力されてしまいます。
A点:(1,0)
B点:(1,1)
int型だとこの問題は起きません、
また、B点の座標の入出力をカットすると、short型でもうまく表示されます。
何が起きているのでしょうか、調べ方などアドバイスよろしくお願いします。
#include <stdio.h> typedef struct{ short x[2];//x座標 short y[2];//y座標 //short area;//面積 } cordinate_t; int main() { cordinate_t cord; puts("A点"); printf("X座標:"); scanf("%d", &cord.x[0]); printf("Y座標:"); scanf("%d", &cord.y[0]); puts("B点"); printf("X座標:"); scanf("%d", &cord.x[1]); printf("Y座標:"); scanf("%d", &cord.y[1]); printf("A点:(%d,%d)\n", cord.x[0], cord.y[0]); printf("B点:(%d,%d)\n", cord.x[1], cord.y[1]); return 0; }
ちなみに構造体に面積の変数があるのは本来このようなプログラムだったからです。
#include <stdio.h> typedef struct{ short x[2]; short y[2]; short area; } cordinate_t; int main() { cordinate_t cord; short m; cord.area = 0; while (1){ printf("面積:%d\n", cord.area); printf("座標を変更しますか? 【Yes…1/No…0】:\n"); scanf("%d", &m); if (!m){ break; } puts("左下"); printf("X座標:"); scanf("%d", &cord.x[0]); printf("Y座標:"); scanf("%d", &cord.y[0]); puts("右上"); printf("X座標:"); scanf("%d", &cord.x[1]); printf("Y座標:"); scanf("%d", &cord.y[1]); if ( cord.x[0] > cord.x[1] || cord.y[0] > cord.y[1] ){ puts("右上は左下よりも大きくしてください"); continue; } printf("左下:(%d,%d)\n", cord.x[0], cord.y[0]); printf("右上:(%d,%d)\n", cord.x[1], cord.y[1]); cord.area = (cord.x[1] - cord.x[0]) * (cord.y[1] - cord.y[0]); }; return 0; }