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.