
C言語について質問です
画像のようにエラーが出てしまうのですが、どこが間違っているのか分かりません
教えていただけるとありがたいです。
※プログラミング初心者です
・構造体→point、
・関数
→input_cordinate
点の座標を構造体pointに入れる
→center_point
2点の中点を求める
<実行例>
点S
X座標:○
Y座標:○
点T
X座標:○
Y座標:○
点Sと点Tの中点は(○,○)です
ーーーーーーーーーーーーーー
#include <stdio.h>
typedef struct
{
double x;
double y;
}point;
point input_cordinate();
point center_point(point point1,point point2);
int main()
{
point cordinate;
point tyuutenn;
cordinate = input_cordinate();
tyuutenn = center_point(tyuutenn.x, tyuutenn.y);
printf("点Sと点Tの中点は(%f,%f)です",tyuutenn.x,tyuutenn.y);
}
point input_cordinate()
{
point point1,point2;
point center_point;
printf("点S\n");
printf("x座標:");
scanf("%lf",&point1.x);
printf("y座標:");
scanf("%lf",&point1.y);
printf("点T\n");
printf("x座標:");
scanf("%lf",&point2.x);
printf("y座標:");
scanf("%lf",&point2.y);
return center_point;
}
point center_point(point point1,point point2)
{
point tyuutenn;
tyuutenn.x = (point1.x + point2.x)/2;
tyuutenn.y = (point1.y + point2.y)/2;
return tyuutenn;
}

No.5ベストアンサー
- 回答日時:
> 書き直すとしたら、どのように書き直せば良いのか分からないので、教えていただけるとありがたいです
それはおかしいんですけどね。
#3と自分の書いたコードを見比べて「どうすれば良いのか」方針くらい付けられないといけない。
少なくとも、各関数の「計算目的」はハッキリせなアカン、ってのは他の人も言ってる通りです。
関数を書く際には「何をやりたいのか」「何をやらせたいのか」明確になってないといけないんだけど、その明確さがない。
今書いて見せてるプログラムを書き直す、っつったって、その方針がハッキリしてない限り「良いプログラム」にはなりません。
> 条件として
>・プロトタイプ宣言をする
プロトタイプ宣言は別に条件、って言うほど条件にはなりませんよ。
単にmain関数をどこに書くとか、関数同士の呼び合いがどうなるのか、制御させる程度の意味しかありません。
貴方の書いたプログラムをただ単に「エラーが出ない」ようにする程度だったら次程度の書き換えで充分です。「良いプログラムかどうか」ってのは置いておきますがね。
/* ここから */
#include <stdio.h>
typedef struct
{
double x;
double y;
} point;
point input_coordinate(void); /* 無引数の場合、引数には void を指定 */
point center_point(point point1, point point2);
int main()
{
point coordinate; /* 皆言ってるけど、座標のスペルは *Coordinate* */
// point center_point; 以下の関数定義より必要ない。
coordinate = input_coordinate();
// tyuutenn = center_point(tyuutenn.x, tyuutenn.y); 以下の関数定義より必要ない
printf("点Sと点Tの中点は(%f,%f)です",coordinate.x,coordinate.y);
}
point input_coordinate(void) /* 無引数の場合、引数には void を指定 */
{
point point1,point2;
// point center_point; これは要らんだろ。
printf("点S\n");
printf("x座標:");
scanf("%lf",&point1.x);
printf("y座標:");
scanf("%lf",&point1.y);
printf("点T\n");
printf("x座標:");
scanf("%lf",&point2.x);
printf("y座標:");
scanf("%lf",&point2.y);
return center_point(point1, point2); /* ここでcenter_point呼び出したいの? */
}
point center_point(point point1, point point2)
{
point tyuutenn;
tyuutenn.x = (point1.x + point2.x)/2;
tyuutenn.y = (point1.y + point2.y)/2;
return tyuutenn;
}
/* ここまで */
No.4
- 回答日時:
なんか、メチャクチャだけど
①input_cordinate()は2点の座標を入力してるけど
それを捨てて未初期化の座標を返してる。メチャクチャ
②center_pointの実装は正しいが、入力は2つの座標(point)なのに
tyuutenn = center_point(tyuutenn.x, tyuutenn.y);
では未初期化の座標 tyuutennのxとyを渡している。
もうメチャメチャ、グチャグチャです。
ついでに、座標つづりは coordinateです。
書き直すとしたら、どのように書き直せば良いのか分からないので、教えていただけるとありがたいです
追記し忘れてしまったのですが、
条件として
・プロトタイプ宣言をする
・input_cordinate
点の座標を入力させて構造体に格納する関数
引数は
なし
戻り値
点の座標<構造体>
・center_point
2点の中点の座標を求める関数
引数は
1つ目の点の座標<構造体>
2つ目の点の座標<構造体>
戻り値
2点の中点の座標<構造体>
No.3
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
double x;
double y;
} point_t;
point_t input_coordinate(double x, double y) {
point_t p = {x, y};
return p;
}
point_t center_point(point_t point1, point_t point2) {
point_t p = {(point1.x + point2.x)/2, (point1.y + point2.y)/2};
return p;
}
int main(void) {
char s[10], *names0 = "ST", *names1 = "XY";
double num[2];
point_t points[2], chuutenn;
for (int i = 0; i < 2; i++) {
printf("点%c\n", names0[i]);
for (int j = 0; j < 2; j++) {
printf("%c座標: ", names1[j]);
scanf("%9s%*[^\n]%*c",s);
num[j] = strtod(s,NULL);
}
points[i] = input_coordinate(num[0], num[1]);
}
chuutenn = center_point(points[0], points[1]);
printf("点Sと点Tの中点は(%lf, %lf)です\n", chuutenn.x, chuutenn.y);
return EXIT_SUCCESS;
}
書き直すとしたら、どのように書き直せば良いのか分からないので、教えていただけるとありがたいです
追記し忘れてしまったのですが、
条件として
・プロトタイプ宣言をする
・input_cordinate
点の座標を入力させて構造体に格納する関数
引数は
なし
戻り値
点の座標<構造体>
・center_point
2点の中点の座標を求める関数
引数は
1つ目の点の座標<構造体>
2つ目の点の座標<構造体>
戻り値
2点の中点の座標<構造体>
わざわざ細かく書いてくださり申し訳ありませんが、こちらの条件での書き方を改めて教えていただけるとありがたいですm(_ _)m
No.2
- 回答日時:
引数として point を要求する関数に double の値を渡すことが間違っている.
というか, それ以前にそれぞれの関数で「するべきこと」を認識できていないような気がする. あと cordinate ってなんだ.
書き直すとしたら、どのように書き直せば良いのか分からないので、教えていただけるとありがたいです
追記し忘れてしまったのですが、
条件として
・プロトタイプ宣言をする
・input_cordinate
点の座標を入力させて構造体に格納する関数
引数は
なし
戻り値
点の座標<構造体>
・center_point
2点の中点の座標を求める関数
引数は
1つ目の点の座標<構造体>
2つ目の点の座標<構造体>
戻り値
2点の中点の座標<構造体>
No.1
- 回答日時:
>tyuutenn = center_point(tyuutenn.x, tyuutenn.y);
関数center_point()の引数は二つのpoint型の値ですね。
でもこの右辺ではtyuutenn.xとtyuutenn.yというdouble型の値が引数に使われています。
吐き出されているエラーはこの点について説明しています。
まあ。そのほかにも突っ込みどころが多い。
input_cordinate()関数が何をしているのか、二つの座標の入力を受けているということはわかるが、何を出力しているのだろうか。
中点の座標か?そんな計算しているそぶりもない。
戻り値となるcenter_pointに何か値を代入しているでもない。何をやっているのだろうか?
書き直すとしたら、どのように書き直せば良いのか分からないので、教えていただけるとありがたいです
追記し忘れてしまったのですが、
条件として
・プロトタイプ宣言をする
・input_cordinate
点の座標を入力させて構造体に格納する関数
引数は
なし
戻り値
点の座標<構造体>
・center_point
2点の中点の座標を求める関数
引数は
1つ目の点の座標<構造体>
2つ目の点の座標<構造体>
戻り値
2点の中点の座標<構造体>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
C言語による楕円関数の記述
-
黒体放射軌跡のxy色度座標への...
-
ASP.NET フォーム上でp...
-
VBで車のアナログスピードメー...
-
エクセルで回転する座標の出し方
-
図形が重なりあっているかどうか
-
任意軸回転を、XYZ軸回転の...
-
MATLABの射影変換についての質...
-
マウスの移動範囲を限定するに...
-
3次元空間上の2つの座標から...
-
EXCEL VBA でウインドウの...
-
OpenCvSharp4による画像判定解...
-
SetWindowOrgとSetViewportOrg...
-
PictureBoxのImageを前面に
-
直線上にある点の座標の求め方
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
メッセージボックスを大きくす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
始点、終点の二つの座標と半径...
-
3次元空間上の2つの座標から...
-
エクセルで回転する座標の出し方
-
C言語 配列で座標
-
エクセルである点からの距離で...
-
シーケンサー(PLC?)で制...
-
多角形の内部かどうか判定する方法
-
Excel VBA で自在に図形を変化...
-
最小二乗平面
-
回転する矩形同士の当たり判定...
-
VBで、開いているExcelシートの...
-
ワード上Shapeの位置情報を統一...
-
図形が重なりあっているかどうか
-
C言語で制作するピラミッドアー...
-
ガウシアンフィルタのCプログラム
-
Excel関数で指定範囲内に有るか...
-
3次元座標上の2直線の交点判...
-
ダイアログ内コントロールの位...
おすすめ情報
書き直すとしたら、どのように書き直せば良いのか分からないので、教えていただけるとありがたいです
追記し忘れてしまったのですが、
条件として
・プロトタイプ宣言をする
・input_cordinate
点の座標を入力させて構造体に格納する関数
引数は
なし
戻り値
点の座標<構造体>
・center_point
2点の中点の座標を求める関数
引数は
1つ目の点の座標<構造体>
2つ目の点の座標<構造体>
戻り値
2点の中点の座標<構造体>