私はcを学んでおり、この言語は低レベルであり、このコンテキストでは例外処理が欠けていることを理解しています.
ユーザーがメニューからいくつかの選択肢の中から選択する簡単なプログラムを作成しました。とてもシンプルです。
プログラムはいくつかのメソッドに分割されています。メソッドの 1 つは、ユーザーがキーを押すのを待ちます。整数が必要です。次に、この整数をスイッチ構造を保持する別のメソッドに返します。
文字が押されたときに問題が発生します。ほとんどの場合、else ブロックの無限ループが開始されます。
別の 0 から 2 を選択する必要があります。もう一度お試しください :-)
別の 0 から 2 を選択する必要があります。もう一度お試しください :-)
別の 0 から 2 を選択する必要があります。もう一度お試しください :-)
...... 等々
私は実際にこれを解決する方法を知りません。scanf 関数からの戻り値を使用しようとしましたが、成功しませんでした。また、scanf関数の引数として(整数ではなく)文字を渡そうとしましたが、これも成功しませんでした。
この問題を処理する方法について何か提案はありますか?
#include <stdio.h>
#include <stdlib.h>
void menu();
void runSelection(int selection);
int getSelection();
int pause();
int main(void) {
do{
menu();
runSelection(getSelection());
}while(pause());
return 0;
}
int pause() {
int c;
printf("\n\nPress enter to continue!");
fflush(stdout);
/* flush inputstream */
while((c = getchar()) != '\n' && c != EOF);
getchar();
return 1;
}
void menu() {
puts(" * * * * * * M E N U * * * * * * *");
puts("1. Do something 1");
puts("2. Do something 2");
puts("3. Do something 3");
fflush(stdout);
}
void runSelection(int selection) {
switch (selection) {
case 0:
puts("you pressed 0");
break;
case 1:
puts("you pressed 1");
break;
case 2:
puts("you pressed 2");
break;
}
}
int getSelection() {
int key;
int true = 0;
do {
scanf("%d", &key);
if (key >= 0 && key <=2) {
true = 1;
}
else {
puts("You must choose an alternative 0 - 2. Please try again :-)");
fflush(stdout);
}
} while (true == 0);
return key;
}