PROG 1.1 おうむ返し

<問題>

<実行結果>

Please input | name gender age (システムの出力)
hanyu m 19 (← ここが入力)
name = hanyu (出力)
gender = m
age = 19

kasai m 41
name = kasai
gender = m
age = 41

takeuchi f 30
name = takeuchi
gender = f
age = 30

onoduka f 25
name = onoduka
gender = f
age = 25

^Z  (control zとEnter) (UNIXの場合は、control d)
END (システムの出力)



(注意 (2020.9)  Visual Studioを利用している場合は、ctrl z一つでは終われない、との連絡を多数もらいました。
この場合は、ctrl zを3つ 入力して終了してください。おかしくなったら、ctrl cで中断終了させてください。連絡してくれた皆さん、ありがとう)


<ヒント>
while (scanfがcontrol zをうけとっていない間) {
    よみとった3つの情報を、プリントfだ
}


解答例

#include <stdio.h>

int main(void) {
    char name[31]; /* 文字列を格納する配列。各要素は1文字 char型 */
    /* 31文字分の文字列。文字列の最後にはヌル文字 '\0'がつく name[0] - name[30]の31だが、最後のヌル文字があるので最大30文字になる */
    char gender; /* 1文字 char型 */
    int age;     /* 整数 int型 */

    printf("Please input | name gender age\n");

    while (scanf("%s %c %d", name, &gender, &age) != EOF) { /* くりかえし入力に関する定番条件文 学習時のみの定番 */
        printf("name = %s \n gender = %c \n age = %d \n\n", name, gender, age);
    }

    printf("END \n");

    return 0;
}

/* 1度、読んでプリントするだけなら、
    scanf("%s %c %d", name, &gender, &age);  /* 配列名だけの場合は、&name[0]と同じ意味 */
    printf("Please input | name gender age\n");

    これを、scanfの状態(戻り値)がEOFになるまで、whileループしているのが、上のプログラム

    EOFになるのは、キーボードの場合 control zの入力 */