Bubble-Sort-Verfahren - while Schleife wird nicht durchlaufen



  • Moin moin 😉 !

    Ich ahbe hier einen versuch gestartet, ein programm zum Thema "Bubble-Sort-Verfahren" zu erstellen - leider funktioniert es nicht richtigt.

    Wenn ich etwas eingebe - z.B.

    233245675434r [Enter]

    Dann wird genau dieses auch wieder ausgegeben... d.h. meine Anweisung

    while (!sortiert)

    wird nicht durchlaufen. Aber warum!? Könnt ihr den Fehler erkennen!?

    Ich habe schon alles mögliche versucht...

    #include <stdio.h>
    
    #define MAX 100 			// Max. 100 Elemente (Ganzzahlen) sollen eingelesen werden
    long zahl[MAX]; 			//Vektor zum Speichern der Zahlen
    
    int main() {
    
    	int i, anzahl; 			//Index und aktuelle Anzahl
    	int sortiert = 0;		//Merker, ob Zahlen sortiert
    	long hilf;				//Hilfsvariable beim Tauschen
    
    	printf("\n*** Ganze Zahlen sortieren ***\n");
    	printf("    (BUBBLE-Sort Algo)\n");
    
    	printf(
    			"\nBitte geben Sie bis zu 100 Zahlen ein:\n(Abbruch durch ungueltige Eingabe)\n\n");
    
    	//Ganze Zahlen einlesen
    
    	for (i = 0; i < MAX && scanf("%ld", zahl + i) == 1; ++i) {
    		;
    	}
    	anzahl = i;
    
    	//Zahlen sortieren
    
    	while (!sortiert) {							//Solange Zahlen noch nicht sortiert sind
    
    		sortiert = 1;
    
    		printf("\ntest 1");
    
    		for (i = 1; i < anzahl; ++i) {			//Benachbarte Zahlen vergleichen
    			if (zahl[i - 1] > zahl[i]) {
    				sortiert = 0;
    				hilf = zahl[i];					//Tauschen
    				zahl[i] = zahl[i - 1];
    				zahl[i - 1] = hilf;
    				printf("\ntest2");
    			}
    		}
    	}
    
    	//Zahlen sortiert ausgeben
    	printf("\n\nDie Zahlen sortiert:\n\n");
    	for (i = 0; i < anzahl; ++i) {
    		printf("%10ld", zahl[i]);
    	}
    
    	return 0;
    }
    

    Danke!



  • Moinsen,

    bei mir ist das ein bisschen anders. Der wert von MAX ist 100.

    i < MAX
    

    in deiner for-Schleife zwingt den Benutzer dann quasi dazu 100 Zeichen einzugeben.
    Wieso kannst du eine Zahl eingeben, und diese mit Enter abschicken, ohne dass 99 weitere Eingabeaufforderungen kommen?



  • ich hab mir den Code wg. Handydisplay nicht angesehen, aber du willst wahrscheinlich statt

    cStarter12 schrieb:

    Wenn ich etwas eingebe - z.B.
    233245675434 [Enter]

    2[Enter]
    3[Enter]
    3[Enter]
    2[Enter]
    4[Enter]
    5[Enter]
    6[Enter]
    7[Enter]
    5[Enter]
    4[Enter]
    3[Enter]
    4[Enter]

    eingeben ...



  • Kommt auch kein "test 1" auf der Konsole?

    Was soll denn bei einer Zahl auch sortiert werden?

    Für scanf ist bei 233245675434r [Enter] das 233245675434 eine Zahl.

    D.h bis zum r wird alles gelesen. Das r nicht mehr.
    Das wird nochmal inm 2. Durchlauf versucht und als Nichtzahl erkannt und scanf gibt 0 zurück.
    Darauf bricht deine Schleif ab.

    Gib mal nach jeder Zahl ein Enter ein.



  • @roflcopter
    Weil da noch eine Und-Verknüpfung mit dem Rückgabewert von scanf gemacht wird.
    scanf kann das r nicht mehr einlesen und gibt daher eine 0 zurück
    Es geht um den Rückgabewert (Return Value) und nicht das, was scanf einliest.


Anmelden zum Antworten