Compiler führt nichts aus, obwohl kein Fehler angezeigt wird
-
Hallo zusammen,
ich komme einfach nicht weiter, ich habe schon alles ausprobiert.
Und zwar soll dieses Programm die ungeraden Zahlen aus einem Array rauslöschen.
Es werden keine Fehler angezeigt, aber das Programm gibt nur "Test" aus. Die Funktion wird nicht ausgegeben.#include <stdio.h> int suche(const unsigned int a[], int laenge, unsigned int wert){ int i; for (i=0; i<laenge; i++) { if (a[i] == wert){ return 1; } } return 0; } void removeOdd(unsigned int a[], int laenge){ int i, e; i = 0; int size = laenge; while(i<laenge) { if (a[i] % 2 != 0) { for (e=i; e<laenge-1; e++) { a[e] = a[e+1]; } size--; } else { i++; } } for (e=0; e<size; e++) { printf("%d\n", a[e]); } } int main(){ unsigned int array[10] = {212, 52, 442, 6622, 822, 221, 1122, 1242, 182, 13321}; printf("Test\n"); removeOdd(array, 10); printf("%d", suche(array, 10, 13321)); }
Ich hoffe, ihr könnt mir helfen.
Danke im voraus & LG
SoA
-
Endlos-Schleife beim ersten ungeraden Wert (Zeile 19) weil i nur bei geraden Werten inkrementiert wird (Zeile 25).
- osdt
-
Dann ist es höchste Zeit dich mal mit dem Debugger vertraut zu machen...
Benutze in Line 19 klammern ist schöner, wenn auch in deinem Fall unnötig.
In Line 29 hast du ein falschen format spec.
Und ne Endlosschleifedie darfst du aber selber suchen...
-
Vielen Dank euch beiden!
Ich habe jetzt die Variable size ganz gelöscht und die Variable laenge überall eingesetzt. Das Programm läuft jetzt.@-lowbyte- %u statt %d in Zeile 29, richtig? Das war ja jetzt nicht der große Fehler, warum das Programm nicht funktioniert hat, aber danke für den Hinweis
Hier das überarbeitete Programm:
#include <stdio.h> int suche(const unsigned int a[], int laenge, unsigned int wert){ int i; for (i=0; i<laenge; i++) { if (a[i] == wert){ return 1; } } return 0; } void removeOdd(unsigned int a[], int laenge){ int i, e; i = 0; while(i<laenge) { if ((a[i] % 2) != 0) { for (e=i; e<laenge-1; e++) { a[e] = a[e+1]; } laenge--; } else { i++; } } for (e=0; e<laenge; e++) { printf("%u\n", a[e]); } } int main(){ unsigned int array[10] = {211, 52, 441, 6622, 821, 222, 1122, 1241, 181, 13321}; removeOdd(array, 10); printf("%d", suche(array, 10, 13321)); }
LG
SoA
-
Und, wie ist die Ausgabe?
13321 sollte doch gar nicht mehr im Array sein.
removeOdd
ändert doch die Anzahl der gültigen Werte.
-
Wie meinst du das?
Die Ausgabe ist:
52
6622
222
1122
113321 wird nicht ausgegeben.
-
Was bedeutet denn die 1 in der letzten Zeile deiner Ausgabe?