© 2005 Martin J. Dürst 青山学院大学
第二問の正解:
C:\Test> test.exe <input.txt >output.txt
struct
)struct
の簡単な例struct person { char name[40]; int height; int weight; }; struct person personA = {"myName", 170, 70 }; int bmi = personA.weight*10000 / (personA.height*person.height);
typedef
を使おうstruct person
より person
が使いやすくて、前者は C の初期からの残り物struct
の後の識別子は無しでも良いtypedef struct { char name[40]; ... }
person; person personA, personB;
typedef
の仕組みtypedef
ではあらゆるデータ型に新しい名前を付けられるtypedef
を書くと変数の名前を型の名前になるint int32;
⇒typedef int int32;
int matrix[4][4];
⇒typedef int matrix[4][4];
union
)struct
と同じが、
struct は
メンバごと場所を確保するunion
はメンバを重ねるので同時に一個しか納まらないコンパイラで字句解析から構文解析へ渡されるトーケン
typedef struct { ttype type; /* トーケンの種類 */ union { int ival; /* 整数用 */ double dval; /* 浮動小数点数用 */ char name[40]; /* 識別子用 */ } val; } token;
enum
)int
) である例 (04C3、階段じゃんけん、の改造):
typedef enum {GUU, CHOKI, PAA} janken; janken moveA, moveB; ... if (moveA == PAA) pointA += 5;
gets
とか scanf
の %s
が危ないか
gets
等の代わりになる新しい関数を作るgetchar()
)戻り値は数字ではなくて列挙体にする。三つの選択肢がある:
typedef
を積極的に使う