1文字を受け入れるCプログラムで簡単なメニューを作成したいと思います。メニューは次のようになります:C言語で1文字を受け入れるメニュー
- [S]プログラムが印刷されるか
- [E] XIT
ユーザーが '1'、 'S' または 'S' を入力した場合 " Hello "を入力して再度入力を促します ユーザーが '2'、Eまたは 'E'を入力すると、プログラムは終了します。 それ以外の場合は、「無効な入力」が表示され、再度プロンプトが表示されます。
私はプログラムを作成することができますが、ユーザーが12,13,14,15,16などと入力すると、1から始まり、Helloと他のオプションも同じように表示されます。
私のコードは次のとおりです。
#include <stdio.h>
void clearBuffer();
int main() {
int i = 0;
char selection;
do
{
printf("\t1. [S]how\n");
printf("\t2. [E]xit\n");
printf("Enter your selection from the number or character noted above: ");
scanf("%s", &selection);
clearBuffer();
if (selection == '1' || selection == 's' || selection == 'S')
printf("Hello");
else if (selection == '2' || selection == 'E' || selection == 'x')
i = 0;
} while(i != 0);
}
void clearBuffer()
{
while(getchar() != '\n');
}
標準ライブラリにないI/O機能が必要になる可能性がある場合は、ユーザーインターフェイス(文字モードでさえ)で作業することが重要です。これが学習の練習であれば、プラットフォーム固有の関数や、より直ちにインタラクティブなI/Oをサポートする移植可能なAPIを検討することもできます。実際には、IIRCがあなたのメニューを扱う 'curses'のような移植可能なライブラリを使うほうが良いでしょう。私は自分で使っていませんが。私はTurbo Pascal用のテキストモードのUIライブラリを書いていました(多くの人が行ったことですが、ホイールを再発明するのは人気の趣味でした)が、私はそれをお勧めしません。 – Steve314
'curses'は実際にはメニューシステムに使用するのに最適なライブラリですが、OPがここでやっていることよりも少し時間がかかります。もしオペレータがライブラリで作業していて、 'curses'に関係する他のすべてのセットアップ/クリーンアップをやっているなら、是非、それをどうぞ。これは宿題のように見えますが、プログラミング志向の人にとってはそれほど遠くないのかどうかは間違いありません。 @ user521815:この時点でCプログラミングをどの程度快適に使用できますか? – Will