Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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:

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.

  • Autor
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^^

  • Autor
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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.