aerothunder Geschrieben 26. November 2008 Teilen Geschrieben 26. November 2008 hallo an alle. ich hab vor kurzem mit der C-Programmierung angefangen, und habe ein blödes problem. ich habe zunächst mal ein programm geschrieben, mit dem ich max. 10 zahlen sortieren kann: #include <stdio.h> void main() { int i_count, i_index, i_j, i_help, i_value[10]; // eingabe der anzahl der zu sortierenden zahlen: do { printf("How many numbers do you want to sort? (MAX 10) "); scanf("%i",&i_count); } while(i_count>10); // eingabe der zahlen: for(i_j=0;i_j<i_count;i_j++) { printf("Number %i: ",i_j+1); scanf("%i",&i_value[i_j]); } // start der rechnung und sortierung: for(i_index=1;i_index<i_count;i_index++) { for(i_j=i_count-1;i_j>=i_index;i_j--) { if(i_value[i_j]<i_value[i_j-1]) { i_help=i_value[i_j]; i_value[i_j]=i_value[i_j-1]; i_value[i_j-1]=i_help; } else { } } } // ausgabe der richtigen reihenfolge: printf("\n"); for(i_j=0;i_j<i_count;i_j++) { printf("\n%i",i_value[i_j]); } printf("\n\nPress ENTER to exit!"); getchar(); getchar(); } das programm läuft eigentlich super, doch nun wollte ich es umschreiben um damit buchstaben zu sortieren. das sieht bei mir dann so aus: #include <stdio.h> void main() { int i_count, i_index, i_j; char c_help, c_letter[10]; // eingabe der anzahl der zu sortierenden zahlen: do { printf("How many numbers do you want to sort? (MAX 10) "); scanf("%i",&i_count); } while(i_count>10); // eingabe der zahlen: for(i_j=0;i_j<i_count;i_j++) { printf("Letter %i: ",i_j+1); scanf("%c",&c_letter[i_j]); } // start der rechnung und sortierung: for(i_index=1;i_index<i_count;i_index++) { for(i_j=i_count-1;i_j>=i_index;i_j--) { if(c_letter[i_j]<c_letter[i_j-1]) { c_help=c_letter[i_j]; c_letter[i_j]=c_letter[i_j-1]; c_letter[i_j-1]=c_help; } else { } } } // ausgabe der richtigen reihenfolge: printf("\n"); for(i_j=0;i_j<i_count;i_j++) { printf("\n%c",c_letter[i_j]); } printf("\n\nPress ENTER to exit!"); getchar(); getchar(); } doch die buchstabenvariante klappt einfach nicht. ich finde einfach den fehler nicht, und im bug report (compile log) steht auch kein hinweis. hoffentlich kann mir hier einer helfen... danke im vorraus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 26. November 2008 Teilen Geschrieben 26. November 2008 Wandel die einzelnen Buchstaben beim Vergleich in numerische Werte um (Stichwort ASCII Code). Ach ja, Du weißt, dass der Bubblesort eine Laufzeitkomplexität von O(n^2) hat !? Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. November 2008 Teilen Geschrieben 26. November 2008 Wandel die einzelnen Buchstaben beim Vergleich in numerische Werte um (Stichwort ASCII Code).Das passiert von ganz allein. char ist ein numerischer Datentyp, der Wert ist der ASCII-Code. Ich vermute mal (mit "klappt einfach nicht" ist leider nicht mehr zu machen), dass hier die Zeilenvorschübe als Zeichen eingelesen werden. In diesem Fall ließe sich das wohl mit "\n%c" als Formatstring für scanf lösen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
aerothunder Geschrieben 26. November 2008 Autor Teilen Geschrieben 26. November 2008 Wandel die einzelnen Buchstaben beim Vergleich in numerische Werte um (Stichwort ASCII Code). Ach ja, Du weißt, dass der Bubblesort eine Laufzeitkomplexität von O(n^2) hat !? Phil ok, das wäre eine idee. mir ist auch aufgefallen, die buchstaben werden sortiert, jedoch spinnt die eingabe total (einfach mal den code ausprobieren und selbst sehen). bei den code handelt es sich um ein schulisches projekt, und die aufgabe ist, mit bubblesort eine lösung zu finden. wir haben noch nicht gelernt, wie man buchstaben in numerische werte umwandelt (so schwer kann es bestimmt nich sein), und es ist glaub ich auch nicht erwünscht... ich habe aber endlich die lösung gefunden: [...] for(i_j=0;i_j<i_count;i_j++) { fflush(stdin); printf("Letter %i: ",i_j+1); scanf("%c",&c_letter[i_j]); } [...] mit fflush(stdin); den zwischenspeicher leeren, dann gehts, trotzdem danke für eure hilfe^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. November 2008 Teilen Geschrieben 26. November 2008 mit fflush(stdin); den zwischenspeicher leeren, dann gehts, Aber soweit ich weiß, nur mit Microsoft-Compilern. fflush auf Eingabeströme erzeugt undefiniertes Verhalten, dein Code ist damit nicht mehr portabel. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
aerothunder Geschrieben 26. November 2008 Autor Teilen Geschrieben 26. November 2008 Aber soweit ich weiß, nur mit Microsoft-Compilern. fflush auf Eingabeströme erzeugt undefiniertes Verhalten, dein Code ist damit nicht mehr portabel. in welchen sinne nicht mehr portabel, kannst du mir das genauer definieren? :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.