<問題>
<実行結果> 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の入力 */