質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1460閲覧

構造体ポインタのメンバの大小比較

hinata_0123

総合スコア1

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/05/30 05:50

編集2021/05/30 06:52

前提・実現したいこと

maxとminを正しく表示する

エラーメッセージ

該当のソースコード

c++
ソースコード

#include <memory.h> #include <malloc.h> #include <stdlib.h> struct stock { int year; double price; }; int main(void) { struct stock *data; FILE* fp; int i; int i_max,i_min; fp = fopen("../../stock.dat", "rb"); if (fp == NULL) { printf("File open error\n"); return 1; } data = (struct stock*)malloc(sizeof(struct stock) * 32); if (data == NULL) { printf("Memory allocation error.¥n"); return 1; } for (i = 0; i < 32; i++) { fread(&data[i].year, sizeof(int), 1, fp); fread(&data[i].price, sizeof(double), 1, fp); } fclose(fp); i_max = 0; i_min = 0; for ( i = 0; i < 32; i++) { if (data->price > data->price) { i_max = i; } else if(data[i].price < data->price) { i_min = i; } } printf("Max : %8.2lf (%d)\n", data[i_max].price,data[i_max].year); printf("Min : %8.2lf (%d)\n", data[i_min].price,data[i_min].year); free(data); return 0; } ### 試したこと ここに問題に対して試したことを記載してください。 data->[i]priceと記述したのですが上手くいきませんでした。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。 for ( i = 0; i < 32; i++) { if (data->price > data->price) { i_max = i; } else if(data[i].price < data->price) { i_min = i; } } このfor文の中で最高のpriceとyearの値と、最低のpriceとyearの値を求めるのですが、構造体ポインタの記述の方法があっているのかということと最高と最低のif文での記述の方法が正しいのかをご教授頂きたいと考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/05/30 05:53

うまくいかないとはどうなるんでしょうか。 問題が見えません
hinata_0123

2021/05/30 06:12

正解は、max : 38915.80 (1989) min : 8455.35 (2011)となるのですが私がデバックを行ったら max : 9893.82 (1983) min : 8455.35 (2011)となり正解とは違う数字になりました。
hinata_0123

2021/05/30 06:13

data->[i]priceと記述すると式のはポインタ型が必要ですというエラーがでます。
thkana

2021/05/30 06:17

上手くいきませんでした 正しく出来ませんでした --- 状況報告ですか? それにしても 「期待する結果」 「与えたデータ」 「(望むものではなかったにしても)得られた結果」 が報告としては必要と思いますが。 --- 報告はそれとして、「質問」はなんですか?
hinata_0123

2021/05/30 06:24

for ( i = 0; i < 32; i++) { if (data->price > data->price) { i_max = i; } else if(data[i].price < data->price) { i_min = i; } } このfor文の中で最高のpriceとyearの値と、最低のpriceとyearの値を求めるのですが、構造体ポインタの記述の方法があっているのかということと最高と最低のif文での記述の方法が正しいのかをご教授頂きたいと考えています。
thkana

2021/05/30 06:26

ここは、「質問への追記・修正の依頼」欄です。 質問への情報追加は質問を編集して行ってください。
hinata_0123

2021/05/30 06:31

すいません、承知致しました。
guest

回答1

0

ベストアンサー

if (data->price > data->price)

これはなんでしょうか。
よくかんがえましょう。

投稿2021/05/30 06:29

y_waiwai

総合スコア87793

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinata_0123

2021/05/30 06:33

構造体ポインタのメンバを参照すると考えました。data->price ではなく、data[i].priceこのように記述しても上手くいきませんでした…
y_waiwai

2021/05/30 06:35

そりゃ、data[0].price との大小関係見てるだけならうまくいかんでしょう。 配列の最後に、ちょっとだけ大きい/小さい数値あったらどうなるか考えてみればわかるかと。
hinata_0123

2021/05/30 06:49

data[i].price < data[i + 1]と書き換えたのですが、値はMax : 17450.70 (2014)Min : 16291.30 (2013)になり正しくなりませんでした。
y_waiwai

2021/05/30 06:55

いきあたりばったりでやってもダメダメですよ。 あなたが手計算で、minとmaxを出す場合、どういう事をするのかを考えましょう。 そのとおりにコードを書けばいいだけです
hinata_0123

2021/05/30 07:12

ありがとうございます。出来ました… 手計算で落ち着いて考えたら出来ました… ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問