while-schleife innerhalb einer switch/case anweisung schließen



  • Hoi,
    schreibe gerade ein Programm zum verwalten unserer drucker patronen bestände:

    do
    	{
    	system("cls");
    	printf("\tPatronenverwaltung 0.1\n");
    	printf("Was m%cchten Sie tun?",148);
    	printf("\n1. Aktuellen Bestand auflisten\n2. Bestandsliste Aktualisieren\nIhre Eingabe: ");
    	fflush(stdin);
    	scanf("%i" ,&wahl1);
    	switch (wahl1)
    	{
    	case 1:
    		system("cls");
    		printf("\t\tAktueller Bestand\n\n");
    		printf("Toner Kyocera:         Toner HP:             Toner Mixed:\n");
    		printf("\nTK-20H: %i St%cck    HP-61X  : %i St%cck    Minolta: 302B   : %i St%cck",tk20,129,hp61,129,min,129);
    		printf("\nTK-50H: %i St%cck    HP-96A  : %i St%cck    Panasonic UG-313: %i St%cck",tk50,129,hp96,129,pana,129);
    		printf("\nTK-60 : %i St%cck    HP-15X  : %i St%cck    Canon EP-W      : %i St%cck",tk60,129,hp15,129,canon,129);
    		printf("\nTK-310: %i St%cck    HP-03A  : %i St%cck",tk310,129,hp03,129);
    		printf("\nTK-400: %i St%cck    HP-98A  : %i St%cck",tk400,129,hp98,129);
    		printf("\nTK-410: %i St%cck    HP-00A  : %i St%cck",tk410,129,hp00,129);
    		printf("\nTK-710: %i St%cck    HP-27X  : %i St%cck",tk710,129,hp27,129);
    		printf("\nTK-A  : %i St%cck    HP-3909A: %i St%cck\n\n",tka,129,hp3909,129);
    		printf("1.Hauptmen%c\n",129);
    		printf("2.Programm Beenden\n\nIhre Eingabe: ");
    		fflush(stdin);
    		scanf("%i" ,&wahl1a);
           }while(wahl1a==1);
    		break;
    case 2: blablub usw
    

    So also innerhalb der case ist also noch eine abfrage ob man wieder ins hauptmenü, ergo an den beginn der schleife springen möchte.
    funktioniert nur so leider nicht, hat einer da eine ahnung wieso?

    @CStoll:
    das fflush(stdin) wird noch rausgenommen;)



  • Du kannst die Kontrollstrukturen nicht überlappen lassen. Die Schleife beginnt vor dem switch()-Block, also kann sie erst nach dem beendet werden:

    do
    {
      ...
      switch(wahl1)
      {
      case 1:
        ...
        break;
      case 2:
        ...
      ...
      }
    }while(...);
    

    XuRaX:) schrieb:

    @CStoll:
    das fflush(stdin) wird noch rausgenommen;)

    Gut, das wollte ich hören 😃



  • also muesste ich mit verschiedenen modulen arbeiten um dann zwischen den modulen hin und her zu springen oder?



  • ouuuh dammed
    wer lesen kann ist klar im vorteil, hab mir da wohl ein eigentor geschossen, muss ja die while schleife nur hinter den block setzten^^



  • Wieso das? Mit dem break springst du aus dem switch() heraus und landest im nächsten Schritt bei der Bedingung der umschließenden while-Schleife.



  • hinter brake bin ich doch nur aus der case anweisung raus aber immer noch in der switch anweisung ergo kann ich ja nicht dort herausspringen.



  • Doch - das break bringt dich hinter die umschließende switch()- oder Schleifen-Anweisung. (da scheinen ja noch einige Grundlagen in der Sprache zu fehlen ;))



  • jau mir fehlen noch einige grundlagen aber ich bin bereit zu lernen;)
    wenn ich jetzt aber hinter break; {while(wahl1a==1);
    schreibe meckert mein compiler aber rum:/



  • Wieso verwendest du nicht sowas wie ich oben skizziert habe? So sieht der Aufbau korrekterweise aus.

    ( break; ist eine Sprunganweisung, die dich an das Ende der umliegenden switch() (oder Schleife) führt - wenn dahinter noch andere Anweisungen kommen, beschwert sich der Compiler zu Recht, daß diese nicht erreicht werden können.)



  • RTFM oder ein gescheites buch, und hoer auf planlos rumzufrickeln. das raubt allen anderen nur die nerven.


Anmelden zum Antworten