© 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 を積極的に使う