構造体メンバへのアクセス
CoddyのCジャーニー「論理と制御フロー」セクションの一部。レッスン 41/63。
構造体変数を作成できるようになったので、その中に格納されたデータの扱い方を学びましょう。ドット演算子(.)を使うと、構造体変数の個々のメンバーにアクセスして変更できます。
構造体のメンバーにアクセスする構文は簡単です。
structVariable.memberNamePoint構造体の例を使って、メンバーの値を読み取ることも書き込むこともできます。
struct Point p1;
// 構造体のメンバーに値を書き込む
p1.x = 10;
p1.y = 20;
// 構造体のメンバーから値を読み取る
printf("Point coordinates: (%d, %d)\n", p1.x, p1.y);ドット演算子は、ほかの変数にアクセスする場合とまったく同じように機能します。代入、算術演算、関数呼び出し、またはその型の通常の変数を使うあらゆる場所で使用できます。各メンバーは宣言された型の独立した変数として動作するため、構造体のデータを整理された直感的な方法で操作できます。
チャレンジ
簡単ドット演算子を使って構造体メンバーにアクセスし、変更するCプログラムを作成してください。プログラムでは次のことを行います。
- 次のメンバーを持つ
struct型のCarを定義します。- 製造年を格納する整数型の
year - 車のブランドを格納する、サイズが20の文字配列
brand - 現在の走行距離を格納する整数型の
mileage - 車の価格を格納する浮動小数点型の
price
- 製造年を格納する整数型の
myCarという名前のCar型変数を作成します。- 次の入力値を読み取り、ドット演算子を使って構造体メンバーに代入します。
- 整数として年を読み取り、
myCar.yearに代入します。 - 文字列としてブランドを読み取り、
strcpy()を使ってmyCar.brandにコピーします(配列には=で代入できません)。 - 整数として走行距離を読み取り、
myCar.mileageに代入します。 - 浮動小数点数として価格を読み取り、
myCar.priceに代入します。
- 整数として年を読み取り、
- すべての値を読み取った後、次の操作を行います。
myCar.mileage += 1000;を使って走行距離を1000増やします。myCar.price -= 500.0;を使って価格を500.0減らします。
- ドット演算子を使って各メンバーにアクセスし、次の形式どおりに車の情報を出力します。
Car Details:Year: [year]Brand: [brand]Mileage: [mileage]Price: [price]
この課題では、構造体メンバーの読み取りと書き込みの両方で使うドット演算子の理解度を確認します。構造体メンバーへの値の代入、算術演算の実行、出力のためのメンバーへのアクセスを練習します。
たとえば、入力が次のとおりの場合:
2020
Toyota
50000
25000.50出力は次のようになります。
Car Details:
Year: 2020
Brand: Toyota
Mileage: 51000
Price: 24500.50自分で試してみよう
#include <stdio.h>
#include <string.h>
// TODO: ここでCar構造体を定義する
int main() {
// TODO: myCarという名前のCar変数を作成する
// 入力値を読み取る
int year;
char brand[20];
int mileage;
float price;
scanf("%d", &year);
scanf("%s", brand);
scanf("%d", &mileage);
scanf("%f", &price);
// TODO: ドット演算子を使用して入力値を構造体のメンバーに代入する
// TODO: 指定されたとおりにmileageとpriceを変更する
// TODO: ドット演算子を使用して車の詳細を表示する
printf("Car Details:\n");
// ここでYear、Brand、Mileage、Priceを表示する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理と制御フローのすべてのレッスン
自分で練習してみよう: Cオンラインコンパイラ