第4回 入力処理
🔁 第4回 プレイヤーの入力を繰り返し受け取ろう
問題が作れるようになったので、次はプレイヤーの入力を受け取ります。
HIT&BLOWでは、正解するまで何度も入力します。
入力メッセージを表示
↓
プレイヤーが入力
↓
コンピュータが応答
↓
もう一度入力メッセージへ戻る
1.入力用の配列を用意する
char input[255];
ゲームのルールでは4桁だけですが、プレイヤーが必ず4文字だけ入力するとは限りません。
そのため、入力を受け取る段階では少し大きな配列を用意し、後で内容を確認します。
2.ここでC言語: while (1)
while (1)
{
/* 繰り返す処理 */
}
whileは、条件が成立している間、処理を繰り返します。
C言語では、
- 0が偽(条件不成立)
- 0以外が真(条件成立)
として扱われます。
(-1も100も15も0以外は全部真なことに注意!)
1は常に真なので、次の処理は終わらない繰返しになります。
while (1)
{
printf("繰り返しています。\n");
}
これを無限ループと呼びます。
💡 今は無限ループにしておき、最終回で正解したときに
breakで抜ける処理を追加します。
3.入力メッセージを表示する
printf("予想した4桁の数字を入力:");
入力を促すメッセージをプロンプトと呼ぶことがあります。
改行を入れずに表示すると、同じ行へ入力できます。
予想した4桁の数字を入力:1234
4.文字列を入力する
scanf("%254s", input);
配列名inputは、配列の先頭位置を表すため、&inputとは書きません。
scanf("%254s", input); /* 今回はこちら */
⚠️
int型の変数を%dで入力するときは&numberと書きますが、文字配列へ%sで入力するときは配列名をそのまま渡します。
↑これって、ちゃんと理屈あるんだけど、はじめは%sのときは、配列名を渡す。で覚えたほうがいいと思う。
5.入力した内容をそのまま表示して確認する
まずは、入力された文字列が正しく配列へ入ったか確認します。
printf("入力された文字列:%s\n", input);
6.前回のプログラムへ入力ループを追加する
前回作成したMakeProblem関数は、そのまま残します。
main関数を次のようにします。
int main(void)
{
char answer[5];
char input[255];
srand((unsigned int)time(NULL));
MakeProblem(answer);
/* デバッグ中だけ正解を表示する */
printf("正解:%s\n", answer);
while (1)
{
printf("予想した4桁の数字を入力:");
scanf("%254s", input);
printf("入力された文字列:%s\n", input);
}
return 0;
}
実行すると、何度でも入力できるようになります。
正解:8250
予想した4桁の数字を入力:1234
入力された文字列:1234
予想した4桁の数字を入力:5678
入力された文字列:5678
予想した4桁の数字を入力:
プログラムは自動では終了しません。
Visual Studioで実行を止めるか、コンソール画面を閉じてください。
(多分Ctrl+Cあたりで止まります)
7.疑似言語との対応
今回作ったのは、全体の疑似言語の次の部分です。
■ hit ≠ 4
│ ・4桁を入力する
│
■
今はまだHITを数えていないため、C言語では一時的にwhile (1)を使っています。
while (1)
{
printf("予想した4桁の数字を入力:");
scanf("%254s", input);
}
🏁 今回のまとめ
- プレイヤーの入力は
char input[255]へ保存する whileは条件が成立している間、処理を繰り返すwhile (1)は無限ループになる%sで文字配列へ入力するときは、配列名をそのまま渡す- 入力メッセージ、入力待ち、応答を繰り返す部分がゲームループになる
次回は、入力が本当にゲームのルールを満たしているか確認します。 (かなり重要なところだね)
No Comments