do while schleife



  • @DirkB: Der "zentrale Ort zum nachschauen" klingt, als wäre das ein Vorteil. Ist es aber nicht.



  • Naivling.
    Es gibt noch eine Welt außerhalb deines Blickfeldes.



  • Wie bitte?



  • So nun habe ich noch hoffentlich die letzte Frage für ein paar Tage 😃 Folgendes:

    do {
    					fflush(stdin);
    					printf("Bitte Key fuer die Verschluesselung eingeben(mindestens 8 Zeichen - maximal 16 Zeichen: \n");    /* speicher den vom User eingegebenen Key in einen String Namens key */
    					scanf("%s",  &key);
    					size_t laenge;			/* speichert in die Variable laenge die Länge(Anzahl Zeichen) des Strings "key" */
    					laenge = strlen(key);
    					if ( laenge < 8 ) {
    						printf("Ihr Key ist zu kurz, bitte geben sie ihn erneut ein \n");
    
    					}else{
    						if (laenge > 16) {
    							printf("Ihr Key ist zu lang, bitte geben Sie ihn erneut ein \n");
    
    						}else{
    							printf("Ihr Key ist in Ordnung \n");
    						}
    					}	
    				}while (laenge > 16 && laenge < 8);
    

    Die Überprüfung im while hat einfach nie geklappt, es wurde zwar ausgegeben dass der Key zu kurz ist(oder zu lang), aber trotzdem ging er nicht wieder zurück zum beginn der schleife.
    Nun habe ich die && durch || ersetzt und oh wunder es klappt. Was mich aber stutzig macht ist dass die Überprüfung der 2. do-while schleife funktioniert hat mit den && Zeichen:

    }while (keyUsage != 'j' && keyUsage != 'n' && keyUsage != 'J' && keyUsage != 'N');
    

    Kann mir einder den Unterschied erklären. Ich peil das grad echt nicht 😕

    Falls notwendig der vollständige Code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char keyUsage ;
        char key[] = "testkey";
    	char laenge ;
    
        do {
            printf("Wollen Sie eine Verschluesselung benutzen(Ja/Nein)? \n");   /* soll das WLAN Netzwerk verschlüsselt sein? */
            scanf("%c", &keyUsage);
    
            switch(keyUsage) {  /* überprüft die Eingabe des Users: j/J = Ja n/N = Nein betreffend Verschlüsselung */
                case 'j': case 'J' :
    				fflush(stdin);  /* leert den Eingabepuffer */
    				printf("OK - Eine Verschluesselung wird verwendet \n");
    				do {
    					fflush(stdin);
    					printf("Bitte Key fuer die Verschluesselung eingeben(mindestens 8 Zeichen - maximal 16 Zeichen: \n");    /* speicher den vom User eingegebenen Key in einen String Namens key */
    					scanf("%s",  &key);
    					size_t laenge;			/* speichert in die Variable laenge die Länge(Anzahl Zeichen) des Strings "key" */
    					laenge = strlen(key);
    					if ( laenge < 8 ) {
    						printf("Ihr Key ist zu kurz, bitte geben sie ihn erneut ein \n");
    
    					}else{
    						if (laenge > 16) {
    							printf("Ihr Key ist zu lang, bitte geben Sie ihn erneut ein \n");
    
    						}else{
    							printf("Ihr Key ist in Ordnung \n");
    						}
    					}	
    				}while (laenge > 16 || laenge < 8);
    				break;
    
                case 'n': case 'N':
    				fflush(stdin);
    				printf("Achtung! - Sie verwenden keine Verschluesselung, dies ist sehr gefaehrlich!!! \n "); /* warnt den User dass die gewählte Option gefährlich ist */
                    break;
    
                default	:
    				fflush(stdin);
    				printf("Error - Haben sie Ja oder Nein eingegeben? \n");    /* sollte der User nicht Ja/Nein eintippen gelangt er hierhin */
                    break;
    		}
    	}while (keyUsage != 'j' && keyUsage != 'n' && keyUsage != 'J' && keyUsage != 'N'); /* führt die obengenannten Aufgaben durch bis eine der Bedingungen erfüllt ist */
    

    In meinen Augen müsste bei der 2. do-while Schleife in die Abfrage ebenfalls ein logisches oder (||)



  • do-while wird solange durchlaufen, solange die Bedingung wahr ist.

    while (laenge > 16 && laenge < 8);
    Finde mal eine Zahl die größer 16 und kleiner 8 ist.

    while (laenge > 16 || laenge < 8);
    Eine Zahl die größer 16 oder kleiner 8 ist.
    Gibt es reichlich.

    while (keyUsage != 'j' && keyUsage != 'n' && keyUsage != 'J' && keyUsage != 'N');
    Es gibt einige Zeichen die ungleich 'j' und ungleich 'J' und ... 'N' sind,
    z.B. 'A'



  • DirkB schrieb:

    do-while wird solange durchlaufen, solange die Bedingung wahr ist.

    while (laenge > 16 && laenge < 8);
    Finde mal eine Zahl die größer 16 und kleiner 8 ist.

    while (laenge > 16 || laenge < 8);
    Eine Zahl die größer 16 oder kleiner 8 ist.
    Gibt es reichlich.

    while (keyUsage != 'j' && keyUsage != 'n' && keyUsage != 'J' && keyUsage != 'N');
    Es gibt einige Zeichen die ungleich 'j' und ungleich 'J' und ... 'N' sind,
    z.B. 'A'

    Ist mir ja alles klar aber bei der 2. Abfrage genügt für mich ja auch bereits eine erfüllte Abbruchbedingung, da so oder so nur eine zeigleich erfüllt sein kann. Folglich müsste dass doch auch mit einem oder funktionieren?



  • mestaaz schrieb:

    In meinen Augen müsste bei der 2. do-while Schleife in die Abfrage ebenfalls ein logisches oder (||)

    Dann musst du auch die != in == ändern und die ganze Bedingung negieren mit !



  • DirkB schrieb:

    mestaaz schrieb:

    In meinen Augen müsste bei der 2. do-while Schleife in die Abfrage ebenfalls ein logisches oder (||)

    Dann musst du auch die != in == ändern und die ganze Bedingung negieren mit !

    Was meinst du mit negieren?



  • mestaaz schrieb:

    Was meinst du mit negieren?

    Aus wahr falsch machen und umgekehrt. Dafür gibt es den Nicht-Operator ! (das Ausrufezeichen)

    }while !(keyUsage == 'j' || keyUsage == 'n' || keyUsage == 'J' || keyUsage == 'N');
    solange (keyUsage gleich 'j' oder keyUsage gleich 'n') nicht wahr ist.


Anmelden zum Antworten