Menu
Coddy logo textTech

構造体での typedef

CoddyのCジャーニー「論理と制御フロー」セクションの一部。レッスン 59/63。

typedefの最も実用的な用途の1つは、struct型のエイリアスを作成することです。これにより、その型の変数を宣言するたびにstructキーワードを繰り返し記述する必要がなくなり、コードがより簡潔で読みやすくなります。

typedefを構造体の定義と組み合わせると、構造体を直接参照する新しい型名を作成できます。構文は次のとおりです:

typedef struct Point {
    int x;
    int y;
} Point;

Point 変数が必要になるたびに struct Point p1; と書く代わりに、単に Point p1; と書けるようになりました。Both の宣言はまったく同じことを実現しますが、typedef 版のほうがより簡潔で読みやすくなります。

このアプローチは、カスタムデータ型を頻繁に扱う大規模なプログラムで特に役立ちます。コードが他のプログラミング言語に近い見た目になり、プログラム全体で struct と繰り返し入力することによる視覚的な煩雑さを軽減できます。

challenge icon

チャレンジ

簡単

typedefを構造体と組み合わせて使用し、シンプルな書籍在庫管理システムを構築するCプログラムを作成してください。プログラムでは、次の処理を行います。

  1. 次のメンバーを持つBookという名前のstructを定義します。
    • 整数型のid
    • サイズ50の文字配列title
    • 浮動小数点型のprice
    • 整数型のquantity
  2. typedefを使用して、struct Bookの型エイリアスBookを作成します。
  3. main関数内で次の処理を行います。
    • Book型の変数book1book2を2つ宣言します。
    • 1冊目の書籍について、ID、タイトル、価格、数量の順に入力を読み取ります。
    • これらの値をbook1のメンバーに代入します。
    • 2冊目の書籍について、ID、タイトル、価格、数量の順に入力を読み取ります。
    • これらの値をbook2のメンバーに代入します。
    • 次の正確な形式で両方の書籍の情報を出力します。
      • Book 1: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
      • Book 2: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
    • 各書籍の在庫の合計金額(価格 × 数量)を計算し、次の正確な形式で出力します。
      • Book 1 Total Value: [total_value]
      • Book 2 Total Value: [total_value]
    • 両方の書籍の在庫を合わせた合計金額を計算し、次の正確な形式で出力します。Combined Inventory Value: [combined_value]
    • 合計金額が高い書籍を判定し、出力します。
      • book1の合計金額の方が高い場合:Book 1 has higher valueを出力します。
      • book2の合計金額の方が高い場合:Book 2 has higher valueを出力します。
      • 両方の金額が等しい場合:Both books have equal valueを出力します。

このチャレンジでは、typedefを構造体と組み合わせることで、プログラム全体でstruct Bookを繰り返し記述する必要がなくなる方法を学びます。変数をstruct Book book1;として宣言する代わりに、単にBook book1;と記述できるため、コードがより簡潔で読みやすくなります。構造体の定義とtypedefの組み合わせ、構造体メンバーの操作、構造体データを使用した計算について練習します。

自分で試してみよう

#include <stdio.h>
#include <string.h>

// TODO: ここに struct と typedef を定義してください

int main() {
    // TODO: ここに Book 変数を宣言してください
    
    // 最初の本の入力を読み取る
    int id1, quantity1;
    char title1[50];
    float price1;
    
    scanf("%d", &id1);
    scanf("%s", title1);
    scanf("%f", &price1);
    scanf("%d", &quantity1);
    
    // TODO: book1 のメンバーに値を代入してください
    
    // 2冊目の本の入力を読み取る
    int id2, quantity2;
    char title2[50];
    float price2;
    
    scanf("%d", &id2);
    scanf("%s", title2);
    scanf("%f", &price2);
    scanf("%d", &quantity2);
    
    // TODO: book2 のメンバーに値を代入してください
    
    // TODO: 本の情報を出力し、値を計算して比較してください
    
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン

自分で練習してみよう: Cオンラインコンパイラ