0379 - ユーザー認証システム

時間制限 1 秒 / メモリ制限 64 MB / 得点 3 / Writer ei1417 / x 18 / 統計 /


TLE
1sec
MLE
64MB
得点
3

問題

ユーザー認証システムを作る。
まずユーザー名とパスワードが対になったデータがあるのでそれを読み込む。本来はテキストファイルから読み込むのだが、今回は標準入力から読み込む。
つまり、今回は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()されているか
また、今回は使わないがファイル入力にはfscanf(),ファイル出力にはfprintf()を使う。
※他にもファイル入出力関数はある。

入出力例

入力例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なので合っている。

この流れで行くとユーザー認証システムがする出力はUSER:2回とPASS:1回とWelcomeなので出力例1のようになる。

入力例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を入力したときの処理である。最後は改行していないことに注意せよ。