PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe zum sortieren



Echo]6[
08-09-2006, 10:04
Hallo!

Ich habe ein hier kleines Programm indem ich Artikel eingeben und mir nachher auch anzeigen lassen kann. Doch nun möchte ich gerne bei der Ausgabe (Menüpunkt 2), dass die Artikel nach der Artikelnr. sortiert werden, aber ich bekomme es einfach nicht hin. Ich hoffe ihr könnt mir helfen! :)



#include <string.h>
#include <stdio.h>
#include <stdlib.h>



struct _Artikel
{
char _cName[31];
int _nNummer;
long _lLagerbestand;
double _lfPreis;
bool _bGefuellt;
};


void main()
{
struct _Artikel Artikel[10];
int _nMenu = 0;
bool _bEingabe = false;
bool _bWeitereEingabe = true;
char _cWahl;

while(_nMenu != 5)
{
fflush(stdin);
printf("================Lagerverwaltung================\n");
printf("Zur Eingabe von Artikeln bitte \"1\" eingeben\n");
printf("Zur Ausgabe der Artikel bitte \"2\" eingeben\n");
printf("Zum weitere Artikel eingeben bitte \"3\" eingeben\n");
printf("Zum Artikel Loeschen bitte \"4\" eingeben\n");
printf("Zum Beenden des Programms bitte \"5\" eingeben\n");

printf("\n%s", "Eingabe: ");
scanf("%d",&_nMenu);

if(_nMenu == 1)
{
for(int i=0;i<=9;i++)
{
if(_bWeitereEingabe == true)
{
printf("\n--Artikel-- %li",i+1);
printf("\nBitte geben Sie den Artikelnamen ein\n");
scanf("%s", &Artikel[i]._cName);
printf("Bitte geben Sie den Artikelnummer ein\n");
scanf("%d", &Artikel[i]._nNummer);
printf("Bitte geben Sie den Lagerbestand ein\n");
scanf("%li", &Artikel[i]._lLagerbestand);
printf("Bitte geben Sie den Preis ein\n");
scanf("%lf", &Artikel[i]._lfPreis);
Artikel[i]._bGefuellt = true;

printf("\n%s", "Weiteren Artikel eingeben (j/n): ");
scanf("%s", &_cWahl);
if(_cWahl == 'j')
{
_bWeitereEingabe = true;
}
else if(_cWahl == 'n')
{
printf("\n%s", "");
_bWeitereEingabe = false;
}
else
{
printf("\n%s", "Bitte \"j\" oder \"n\" eingeben!");
}
}

_bEingabe = true;
}
}
else if(_nMenu == 2)
{
if(_bEingabe == true)
{
for(int j=0;j<=9;j++)
{
if(Artikel[j]._bGefuellt == true)
{
printf("\nArtikel %li\n",j+1);
printf("***********");
printf("\nArtikelname: %s", Artikel[j]._cName);
printf("\nArtikelnummer: %d", Artikel[j]._nNummer);
printf("\nLagerbestand: %li", Artikel[j]._lLagerbestand);
printf("\nPreis des Aritkels: %lf", Artikel[j]._lfPreis);
printf("\n\n");
}
}
}
else
{
printf("\n%s", "Es muss erst eine Eingabe gemacht werden!\n\n\n");
}
}
else if(_nMenu == 3)
{
_bWeitereEingabe = true;
for(int k=0;k<=9;k++)
{
if(Artikel[k]._bGefuellt != true)
{
if(_bWeitereEingabe == true)
{
printf("\n--Artikel-- %li",k+1);
printf("\nBitte geben Sie den Artikelnamen ein\n");
scanf("%s", &Artikel[k]._cName);
printf("Bitte geben Sie den Artikelnummer ein\n");
scanf("%d", &Artikel[k]._nNummer);
printf("Bitte geben Sie den Lagerbestand ein\n");
scanf("%li", &Artikel[k]._lLagerbestand);
printf("Bitte geben Sie den Preis ein\n");
scanf("%lf", &Artikel[k]._lfPreis);
Artikel[k]._bGefuellt = true;

printf("\nWeiteren Artikel eingeben (j/n): ");
scanf("%s", &_cWahl);
if(_cWahl == 'j')
{
_bWeitereEingabe = true;
}
else if(_cWahl == 'n')
{
printf("\n%s", "");
_bWeitereEingabe = false;
}
else
{
printf("\nBitte \"j\" oder \"n\" eingeben!");
}
}
}
}
}
else if(_nMenu == 5)
{
exit(0);
}
else
{
printf("\n%s", "Bitte nur \"1\",\"2\", \"3\", \"4\" oder \"5\" eingeben");
}
}
}

Joghurt
08-09-2006, 12:54
Du programmierst C in einem C++-Compiler...
Hier mal, wie man es in C machen würde:

#include <stdlib.h>

typedef struct Artikel
{
char cName[31];
int nNummer;
long lLagerbestand;
double lfPreis;
// bool bGefuellt;
} Artikel;

int compare_nummer(const void* artikel_a, const void* artikel_b)
{
const int a = ((const Artikel*)artikel_a)->nNummer;
const int b = ((const Artikel*)artikel_b)->nNummer;

if (a<b) return -1;
if (a>b) return 1;
return 0;
}

void sort_artikel(Artikel* artikel_array, int anzahl)
{
qsort(artikel_array, anzahl, sizeof(Artikel), compare_nummer);
}Das bool habe ich auskommentiert, weil bool kein C ist.

Unter C++ gibt es aber bessere Möglichkeiten, das zu machen. Schau dir mal die STL an. Und benutze cout << ... statt printf. Und gewöhne dir die blöden _ vor Variablennamen ab. (Eigentlich sind solche Namen für den Compiler reserviert.)

locus vivendi
08-09-2006, 15:15
Echo]6[, deine Eingabeschleife ist glaube ich auch nicht in Ordnung. Wenn der Benutzer im letzen Durchlauf der Schleife 1, 2 oder 3 im Hauptlevel eingegeben hat und im Durchlauf danach keine Zahl eingibt wird die Schleife wahrscheinlich endlos laufen. Das kannst du verhindern in dem du nach der Eingabe auf Fehler testest.

fflush(stdin) sollte man auch nicht machen. fflush arbeitet nicht mit Eingabe-Streams zusammen. Und main sollte int zurückgeben.

Ansonsten würde ich auch sagen, benutz einfach C++...