2016-12-06 4 views
0

ユーザが選択した後に、その選択を促すオリジナルの文(2つのprintfs)が繰り返されるように、何を修正する必要がありますか?例:whileループ内のswitch文。どのようにユーザーの選択肢を繰り返すのですか?

while(1) { 
printf("What would you like to do next? \n"); 
printf("\tC to create more\n\tD to display\n\tI to insert at beginning\n\tN to exit\n"); 

scanf(" %c", &response); 
switch(response) { 
case 'C' : create(); scanf(" %c", &response); 
case 'D' : display(); scanf(" %c", &response); 
case 'I' : insert_at_beg(); scanf(" %c", &response); 
case 'N': exit(0); 
default : printf("Invaild choice. Bye\n"); exit(0); 
    } 
} 

私は自分のロジックがどこかの場所にあることを知っています。

+3

は '破ると' switch'に 'scanf'sのすべてを交換してみてください;' – user3386109

答えて

0

ここには2つの問題があります。

一つは次のとおりです。

あなたはケースの間にbreak文を使用していませんでした。あなたの場合、各ケースの後にscanfステートメントを置く必要はありません。スイッチ内のすべてのscanfをbreakに置き換えてください。 1つ以上のケースがある場合、breakを使用するためにはtが必須です。 switchはif ... else文の代替ではないためです。

第二には、次のとおりです。

マッチが失敗した場合のscanf()は入力トークンを消費しないので、それは無限ループに入ります。 scanf()は同じ入力を何度も繰り返して一致させようとします。あなたは標準入力をフラッシュする必要があります。 (入力ストリームをfflushすると、未定義のビヘイビアが呼び出されますが、厳密にはそうではありません)。それ以外の場合は

if (!scanf(" %c", &response)) fflush(stdin); 

この

if (scanf(" %c", &response) == 0) { break; } 
関連する問題