Daten aus einer Binärdatei auslesen + nach best. Gesichtspunkten sortieren
-
-
Ich hatte das ganze ja schonmal hinbekommen - das Problem dabei war, dass ich die Datensätze irgendwie nicht korrekt mit übernommen habe.
Und das Problem möchte ich eben gern meiden.Deswegen nochmal die Frage
//EDIT:
Oh ich glaub es funktioniert
Muss ich es nur noch umbasteln, dass das größte dann oben steht
-
voodoopuppe schrieb:
Muss ich es nur noch umbasteln, dass das größte dann oben steht
Und das dürfte auch nicht so schwer werden
Du mußt in deiner Vergleichsfunktion nur die Rückgabewerte -1 und 1 vertauschen, dann hast du die umgekehrte Sortierung.
-
hab einfach > und < vertauscht, hat den selben Effekt
Andere Frage:
Wie gebe ich die sortierten Daten aus dem Array jetzt noch über den Drucker aus?Kann ich das einfach so machen:
[CPP]FILE* printer = fopen("LPT1","w");
if(!printer)
{
printf("Drucker konnte nicht gefunden werden, bzw. ist nicht eingeschaltet.\n");
return EXIT_FAILURE;
}fputs(??Kommt hier einfach der Name der Funktion rein wo ich die Daten sortiert ausgebe??,printer);
fputc('\f',printer);fclose(printer);
return EXIT_SUCCESS;[/CPP]
-
voodoopuppe schrieb:
hab einfach > und < vertauscht, hat den selben Effekt
klar, weil die umsätze alle 0 sind
-
Du könntest deiner Ausgabefunktion einen zusätzlichen Parameter "FILE* fout" mitgeben und dort drin über fprintf() ausgeben (funktioniert genauso wie printf(), erhält aber als ersten Parameter die Zieldatei). Dann kannst du im Hauptprogramm entscheiden, wohin die Ausgabe gehen soll -
print_data(...,stdout);
gibt auf dem Monitor aus,print_data(...,printer);
auf dem Drucker.
-
Versteh ich das also richtig, dass du meinst ich soll eine If-Abfrage einbauen, und die soll überprüfen ob fout printer oder stdout ist und wenn printer, dann soll einfach fprintf anstatt von printf genommen werden?
Also quasi so:
int Ausgabe(int OrdnenNach,FILE* fout) { if (fout == printer) { for(i=0;i<N;++i) { Arbeitseffektivitaet = (myRECORD[i].Umsatz/myRECORD[i].Beschaeftigte); Mitarbeiterlohn = (myRECORD[i].Loehne/myRECORD[i].Beschaeftigte); fprintf("Filiale: %s\n",myRECORD[i].Filiale fprintf("Umsatz: %f\n",myRECORD[i].Umsatz); fprintf("Bestand: %f\n",myRECORD[i].Bestand); fprintf("Beschaeftigte: %f\n",myRECORD[i].Beschaeftigte); fprintf("Loehne: %f\n",myRECORD[i].Loehne); fprintf("Mitarbeiterlohn: %f\n",Mitarbeiterlohn); fprintf("Arbeiteseffektivitaet: %f\n\n",Arbeitseffektivitaet); getch(); } else { Ausgabeammonitor....} fclose(fh); }
(stark gekürzte Variante)
-
Nein, du gibst fprintf() einfach mit auf den Weg, wohin es ausgeben soll:
int Ausgabe(int OrdnenNach,FILE* fout) { for(i=0;i<N;++i) { Arbeitseffektivitaet = (myRECORD[i].Umsatz/myRECORD[i].Beschaeftigte); Mitarbeiterlohn = (myRECORD[i].Loehne/myRECORD[i].Beschaeftigte); fprintf(fout,"Filiale: %s\n",myRECORD[i].Filiale); ... } } //Ausgabe auf Monitor: Ausgabe(3,stdout); //Ausgabe auf Drucker: FILE* printer = fopen("LPT1","w"); Ausgabe(1,printer); //Speichern in Datei: FILE* datei = fopen("data.txt","w"); Ausgabe(0,datei);
-
Das dumme ist eben das mit dem Drucker funktioniert so nicht..:(
Ich selber hab keinen Drucker am LPT1 Anschluss, drucke via LAN und in der FH is es ja genauso
-
Dann liegt das nicht an fprintf(), sondern an der Zielangabe für die Datei ("LPT1") - afaik sind solche Sonder-Dateinamen nicht standardisiert.