Zum Inhalt springen

sotieren von buchstaben klappt nicht


Empfohlene Beiträge

Geschrieben

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 :rolleyes:

Geschrieben
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.

Geschrieben
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^^

Geschrieben
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.

Geschrieben
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:

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...