Cから始まる構造体_構造配列1

4342 ワード

最近私たちは構造体を勉強していますが、確かにあまり勉強していないような気がしますので、まず構造体という章にジャンプすることにしました.実は私もあまり透徹しているわけではありません.また、フォーラムで何か私自身が理解しにくい問題があるかどうかを調べなければなりません.ˉ(∞)ˉ )だからゆっくり更新しました.時間を割いて見てほしい.結局、構造体は難しい—————————————————————————————————————————————————————————設計プログラムの最も重要なステップであるホテルにはデータを表す正しい方法が懸かっている.ほとんどの場合、単一の単純な変数と配列を使用すると十分ではありません.そのため、Cは構造変数を使用して、データを表す能力をさらに強化し、多くのデータに柔軟に対応することができ、この構造体では新しい形式を作成し、新しいデータ型を形成することができます.では、まず、1つの例から、なぜ構造を使用する必要があるのか、どのように構造と使用構造を作成する必要があるのかを見てみましょう.
前のプログラムを見てみましょう.彼の構造内には本が1冊しかありません.明らかに十分ではありません.おかみさんが必要としているのは本がたくさんある本屋です.では、bookプログラムをもっと多くの本を処理できると拡張しなければなりません.明らかに、すべての本はbook構造で説明することができます.2冊の本を説明するとき、おかみさんは2冊の本の情報を入力して、私たちは2つの変数が必要で、このように押して、どれだけの本を処理する必要がありますか?私たちは1つのこの構造の配列を使うことができて、私はもう1つの例を挙げて、これは前の例に対応して、それに対応して見ることができます
#include  
#define MAXTITL 40 
#define MAXAUTL 40 
#define MAXBKS 100                              /*             */ 
struct book {                                   /*   book      */ 
  char title[MAXTITL]; 
  char author[MAXAUTL]; 
  float value; 
 };  
int main (void) 
{ 
    struct book library[MAXBKS];                /* book      */ 
    int count = 0; 
    int index;  
  printf ("Plesae enter the book title 
"); printf ("Press [enter] at thne start of a line to stop
"); while (count < MAXBKS && gets(library[count].title) != NULL && library[count].title[0] != '\0') { printf ("Now enter the author
"); gets (library[count].author); printf ("Now enter the value
"); scanf ("%f", &library[count++].value); /* count++ */ while (getchar() != '
') continue; /* */ if (count < MAXBKS) printf ("Enter then next title
"); } if (count > 0) /* */ { printf ("Here is the list of your books :
"); for (index = 0; index < count; index++) /* */ printf ("%s by %s : $%.2f
", library[index].title, library[index].author, library[index].value); } else /* */ printf ("No Books? Too bad
"); return 0; }

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
(写真が着られないような気がしますね(~ ̄▽ ̄)→)* ̄▽ ̄*)o)手打ち
    Plesae enter the book title      Press [enter] at thne start of a line to stop      My life as a Budgie      Now enter the author      Mack Zackles      Now enter the value     12.95       Enter then next title         .... more ........   Here is the list of your books :  My life as a Budgie by Mack Zackles : $12.95  Thought and unthought Rethought by kindra Schlagmeyer : $43.50  The Business of a Bee by Buster Downsize : $19.25  .......more
——————————————————————————————————————————————————
まず、構造配列を宣言する方法と、各メンバーにどのようにアクセスするかを見てみましょう.
——————————
構造配列の宣言-他の単純なタイプの配列と同じです.
sturct book library[MAXBKS];
この文はlibraryが1つの菊結合MAXBKS要素の配列であることを宣言し、この配列の各要素はbookタイプの構造であるため、library[0]はbook構造であり、library[1]もbook構造である.このように推す.実は私は図を描きたいのですが、誰が私にどのように図を描くかを教えてくれますか(̄Q̄)¯,[覚えておいてください.libraryは構造名ではありません.彼は要素タイプがstruct book構造の配列名です.]
その後、メンバーをどのようにマークして単独で抽出するかを見てみましょう.
構造番号をマークするメンバーは、古い方法で、構造名の後(libraryは構造名ではないと言ったがlibrary[0]はちょうど構造名である)に点演算子を付けてメンバー名を付けます.このようにします.
library[0].value/*1番目の配列要素のvalueメンバー*/
library[4].title/*5番目の配列要素のtitleメンバー*/
配列の下付き文字は、メンバー名の後ろではなくlibraryの後ろにあることに注意してください.
library.value[2]//は間違っています
library[2].value//正解
library[2]を使用する.valueの理由はlibrary[2]がlibrary[1]が別の構造変数名であるように構造変数名であるためである.
では、もう一つ質問します.次の式はどう解釈しますか.
library[2].title[2]
これは、3番目の構成(library[2]の部分)で記述する本の名称の5番目の文字(title[4]の部分)である.この例では、文字Bという例では、点演算子の右側の下付き文字は各メンバーをそるが、点演算子の左側の下付き文字は構造配列をそる.
————————————————————————————————————————————————————————————————————————————
では、まとめてみましょう.次のシーケンスを見てみましょう.
library/*book構造配列*/
library[2]/*配列要素なのでbook構造*/
library[2].title/*char配列はlibrary[2]のtitleメンバー*/
library[2].title[4]/*はメンバーtitleの中の文字*/
———————————————————————————————————————————————————