teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追加

2020/07/31 05:52

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -56,4 +56,17 @@
56
56
  つまり、`c->num`は、int型の変数になります。
57
57
  deliver型を渡さないといけないところに、int型の値が渡されているため、エラーになります。
58
58
 
59
- 対策は、deliver型の値を渡してください。
59
+ 対策は、deliver型の値を渡してください。
60
+
61
+ > 今いる位置を表したい場合c->num以外にどのように表せるのかわかりません。
62
+
63
+ そもそもの問題として、`c->num` は、「今いる位置」を表したデータなのでしょうか?
64
+ 構造体の中のコメントには、「家番号」と書かれています。
65
+ 家番号を元に現在位置を割り出すシステムである、というのは設計としてはあり得ます。
66
+ しかし、肝心の呼ばれた先のspan関数の中には、渡された家番号(整数値)を元にして、今いる位置の座標を割り出すといったようなコードは何一つ書かれていません。
67
+
68
+ 「座標を含む`deliver`を渡して、それを元に距離を計算する」
69
+ 「家番号(`c->num`)を渡して、それを元に現在座標を割り出して、そこから距離を計算する」
70
+ 設計としてはどちらでも良いのですが、呼び出し元と関数側で、どちらか1つには統一する必要があります。
71
+ 現状では、双方の設計が食い違っている為にエラーとなってしまっています。
72
+ まずは、どちらの設計にするかを決めることが先です。

3

追加

2020/07/31 05:52

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -43,4 +43,17 @@
43
43
  mainからは何も呼ばれていませんし、謎の無限ループしかないです。
44
44
 
45
45
  (ついでにprintfにはJAVAみたいにオブジェクトのデータを自動的に変換して出すような機能は存在しません。
46
- 表示方法は自分でフォーマット指定と各種変数にして与える必要があります。)
46
+ 表示方法は自分でフォーマット指定と各種変数にして与える必要があります。)
47
+
48
+
49
+ > double span(deliver pa, deliver pb)
50
+ に対しspan(c->num,dest)とする場合、deliver内からnumを持ってきているのですが、それではなぜダメなのでしょうか。
51
+
52
+ span関数の第一引数には、`deliver pa`というように、deliver型の変数が指定されているので、
53
+ 渡せる値も同じくdeliver型のものになります。
54
+ `c->num`は、『deliver内からnumを持ってきている』の通り、
55
+ deliver型の中に`int num;`と定義されている要素です。
56
+ つまり、`c->num`は、int型の変数になります。
57
+ deliver型を渡さないといけないところに、int型の値が渡されているため、エラーになります。
58
+
59
+ 対策は、deliver型の値を渡してください。

2

追加

2020/07/30 12:20

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -20,4 +20,27 @@
20
20
  `c->num=dest;`と書かれていますが、
21
21
  `c->num`は`int`、`dest`は`deliver` なので型が合わず代入できません。
22
22
 
23
+
24
+ > エラー部分の内容の修正
25
+
23
- 型と確認みてください。
26
+ 変数の型と数の合わせてください。
27
+
28
+ > プログラム自体の考えはあっているのか教えて頂きたいです。
29
+
30
+ ```
31
+ int main(void)
32
+ {
33
+ int i;
34
+ deliver data[]= {{0,4.0,7.5,0.0,0.0,0},{1,3.0,4.5,0.0,2.3,0},{2,3.6,4.0,0.0,8.7,0},{3,7.0,2.0,0.0,6.0,0};
35
+ while(1){
36
+ printf(data[i]); /*順番を出力*/
37
+ }
38
+ return 0;
39
+ }
40
+ ```
41
+
42
+ このコードには、考え方自体が含まれていません。
43
+ mainからは何も呼ばれていませんし、謎の無限ループしかないです。
44
+
45
+ (ついでにprintfにはJAVAみたいにオブジェクトのデータを自動的に変換して出すような機能は存在しません。
46
+ 表示方法は自分でフォーマット指定と各種変数にして与える必要があります。)

1

追加

2020/07/30 12:10

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -15,4 +15,9 @@
15
15
 
16
16
  `span(c->num,dest);`と書かれていますが、
17
17
  定義は、`double span(deliver pa,deliver pb)`で、
18
- 引数は`deliver`なのに、`c->num`は、`int`で型が合いません。
18
+ 引数は`deliver`なのに、`c->num`は、`int`で型が合いません。
19
+
20
+ `c->num=dest;`と書かれていますが、
21
+ `c->num`は`int`、`dest`は`deliver` なので型が合わず代入できません。
22
+
23
+ 型と変数名の確認をしてみてください。