#include <stdio.h>
void clearKeyboard(void){
while(getchar()!='\n');
}
void pause(void){
printf("Press <ENTER> to continue...");
clearKeyboard();
}
int getMenuChoice(void){
int choice;
printf("1- List all items\n");
printf("2- Search by SKU\n");
printf("0- Exit program\n> ");
scanf("%d", &choice);
return choice;
}
int getYesOrNo(void){
char ch;
int ret;
ch = 0;
ret = 0;
while(ch != 'Y' || ch != 'y' || ch != 'N' || ch != 'n')
{
scanf("%c", &ch);
clearKeyboard();
if (ch == 'Y' || ch == 'y'){
ret = 1;
return ret;
}
if (ch == 'N' || ch == 'n'){
ret = 0;
return ret;
}
else if (ch != 'Y' || ch != 'y' || ch != 'N' || ch != 'n'){
printf("Only (Y)es or (N)o are acceptable: ");
}
}
return ret;
}
int main(void){
int choice;
int temp = 0;
choice = 0;
printf("=== TEST MENU ===\n");
pause();
while(temp == 0){
choice = getMenuChoice();
if (choice != 0){
printf("*** not implemented ***\n");
}
else{
printf("Do you really want to quit? ");
temp = getYesOrNo();
}
}
printf("=== END OF MENU TEST ===\n");
return 0;
}
Wenn der Code ausgeführt wird, sollte es das Testmenü ausdrucken und ich müsste drücken Sie die EingabetasteFür if-Anweisung, obwohl es wahr ist, ist es Schleifen wieder
dann fortzusetzen, Es würde Vielfache von Druckanweisungen anzeigen (listall..search von ... exit)
So, wenn der Benutzer 0 eingibt, fragt es Sie möchten wirklich beenden und wenn der Benutzer y eingibt, sollte es Beenden Sie
Allerdings ist das Problem, das Programm fragt den Benutzer nicht notwendig Frage: „Nur (Y) n oder (N) o akzeptabel sind“ ein weiteres Mal, nachdem er fragt: „Sie wirklich beenden Sie wollen?“ wenn ich schon y eingegeben habe, ist das eine gültige antwort.
Warum ist das?
P. S-Bibliothek gibt es bestehende
formatieren Sie bitte den Code richtig. Und wähle eine Sprache. Sieht aus wie C zu mir, aber wenn yuo es mit einem C++ Compiler kompiliert, dann würde ich es nennen – user463035818
'char ch C++;' - ch deklariert, aber nicht initialisiert. Unmittelbar danach wird "ch" mit verglichen. Dies ist ein nicht definiertes Verhalten und ein Fehler. Diese –
'(ch! = 'Y' || ch! = 'Y' || ch! = 'N' || ch! = 'N')' nie falsch sein, egal welcher Wert 'ch' trägt. So kann es durch 'while (1)' ersetzt werden. – alk