問題
ユーザー認証システムを作る。
まずユーザー名とパスワードが対になったデータがあるのでそれを読み込む。本来はテキストファイルから読み込むのだが、今回は標準入力から読み込む。
つまり、今回はfopen()やfclose()などはしない。
※だが、本番ではCHECK POINTにfclose()をしているかという項目があったので注意
データ数は入力の先頭で与えられる。データ数は最大でも10個である。
次に、ユーザーにユーザー名を入力してもらう。入力する際は"USER:"と出力(改行しない)する。
入力されたユーザー名が読み込んだデータの中にあれば、ユーザー名の入力は終了する。
なかった場合再びユーザーにユーザーを入力してもらう。
これをユーザー名が見つかるまで行う。
次に、パスワードを入力してもらう。入力する際は"PASS:"と出力(改行しない)する
先ほど入力したユーザー名と対になっているパスワードと、入力されたパスワードが完全一致した場合"Welcome"(改行する)と出力してユーザー認証システムを終わる。
もし違った場合、再びユーザーにパスワードを入力してもらう。
もし3回パスワードの入力を失敗した場合"Oh..."(改行する)と出力してユーザー認証システムを終わる。
また、ユーザー名を入力する際にユーザー名に"exit"と入力されたら何も出力せずにユーザー認証システムを終わる。
ユーザー名が"exit"のユーザーはいない。
入力
まず1行目にデータの数n(1≦n≦10)が与えられる。2行目から2+(n-1)行目までにユーザーのデータが与えられる。
左から順にユーザー名、パスワードである。
2+n行目からユーザーがユーザー認証システムで入力した文字列が与えられる。
この文字列はちゃんとユーザー認証システムが動いていれば余すことなく使われ、足りなくなることもない。
入力に使われる全ての文字列は30文字以下である。
CHECK POINT
本番では以下の項目が採点基準となる。(うろ覚え)
- ・データの読み込みが出来ているか
- ・ユーザー名の入力が正しくできているか
- ・パスワード認証が正しくできているか
- ・fclose()されているか
※他にもファイル入出力関数はある。
入出力例
入力例1
4 Suzuki 1111 Honda abcde EAYASU nanojya YJU 114514 suzuki Suzuki 1111
出力例1
USER:USER:PASS:Welcome
解説
1つめの入力:suzuki → ユーザーにsuzukiはいない
2つめの入力:Suzuki → ユーザーにSuzukiはいる
3つめの入力:1111 → Suzukiさんのパスワードは1111なので合っている。
入力例2
3 Suzuki SZK Miura MUR Kimura KMR Miura mur Mur MUr
出力例2
USER:PASS:PASS:PASS:Oh...
解説
パスワードを3回間違えたのでOh...で終わる。
入力例3
3 ei1417 aiueo ei1434 contact ei1428 scandal ei1401 exit
出力例3
USER:USER:
解説
ユーザーの入力の時にexitを入力したときの処理である。最後は改行していないことに注意せよ。