0 Daumen
915 Aufrufe

Hallo Zusammen,

die folgende Aufgabe muss ich in C lösen. also ich glaube, ich stehe kurz davor die Aufgabe komplett zu lösen, ich weiß aber nicht, wie ich ad letzte Teil der Aufgabe( in grün markiert ) programmieren soll.


In dieser Aufgabe erhalten Sie eine Liste von Autos über die Standardeingabe, die Sie nach Bezeichnung, Baujahr und Kilometerstand filtern und ausgeben sollen.
     • Die Liste autos.txt enthält drei Spalten. In der ersten Spalte steht die Bezeichnung des Fahrzeugs,
     in der zweiten das Baujahr und in der dritten der Kilometerstand.
                         Kleinwagen4 1999 25000
                         Bus3 2010 365000
                         Lkw2 2015 2500
      • Ihr Programm soll folgende Kommandozeilen-Optionen anbieten:
                        -k zahl Betrachtet nur Autos mit einem Kilometerstand von weniger als zahl Kilometern.
                        -g zahl Betrachtet nur Autos mit einem Baujahr größer als zahl.
                        -b String Betrachtet nur Autos mit Bezeichnung string.
                         Dateiname Wenn ein anderer Parameter als die vorherigen drei übergeben wird, dann soll
                         angenommen werden, dass dies ein Dateiname ist. In diesem Fall soll die Ausgabe in
                         diese Datei anstatt auf stdout ausgegeben werden.


ich wäre wirklich sehr dankbar, wenn mir jemand helfen könnte.
Liebe Grüße.

Avatar von

Hi, ich mache gerade dieselbe Aufgabe und komme überhaupt nicht klar.

Wie hast du sie gelöst? Kannst du mir vielleicht einen Tipp geben?

Ja natürlich gerne.

du sollst erstmal getopt verwenden, um die oben genannte Optionen anbieten zu können.

Und dann sollst mit einer Schleife die Ergebnisse einfach nur ausgeben.

Beispiel :

while (fscanf(stdin, "%S %d %d", bezeichnung, &baujahr, &kilometerstand ) !=EOF){

        if (.......){
                pritf("%s %d %d", bezeichnung, baujahr, kilometerstand);
}
}

und achte noch darauf, die Funktion freopen, die unten mit dem Beispiel steht, zu verwenden, um das letzte Teil der Aufgabe zu machen.

Viele Grüße.

Das hilft mir schonmal weiter, danke :)

Hast du die .txt Datei zeilenweise ausgelesen und mit strtok in bereichnung/baujahr und kilometerstand eingeteilt?

du brauchst keine weitere zusätzliche Funktionen fürs Auslesen, mit der while-Schleife, die da oben steht, wird das Auslesen zeilenweise erledigt.

also du sollst jetzt nur noch sagen, was von der .txt Datei ausgegeben werden soll.

Achso, okay dann hatte ich die ganze Zeit einen Denkfehler :D Danke für deine Hilfe, ich gucke mal ob ich es jetzt hinbekomme.

und achte noch darauf, die Funktion freopen, die unten mit dem Beispiel steht, zu verwenden, um das letzte Teil der Aufgabe zu machen.

Alternative dazu ist, fprintf für die Ausgabe zu verwenden.

Beispiel.

#include <stdio.h>

/* ... */

FILE* outstream;

if (ausgabe_in_datei) {
outstream = fopen(dateiname, "w");
} else {
outstream = stdout;
}

/* ... */

fprintf(outstream, "%s %d %d", bezeichnung, baujahr, kilometerstand);

1 Antwort

0 Daumen
 
Beste Antwort

Die Funktion

FILE* freopen(const char* path, const char* mode, FILE* stream);

aus stdio.h

  1. schließt die Datei stream,
  2. öffnet die Datei namens path mit Zugriffsmodus mode,
  3. verbindet die geöffnete Datei mit stream.

Beispiel.

#include <stdio.h>

int main(int argc, char* argv[]) {
if (argc == 2) {
freopen(argv[1], "w", stdout);
}

printf("Hello World!\n");
}

Avatar von 5,7 k

Vielen lieben Dank es hat geklappt.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community