[C] Werteübergabe

Pherseus

Erfahrenes Mitglied
Hi,

ich habe die Aufgabe, an eine C Programm, Werte zu Übergeben und diese zu sortieren.

Dabei soll die Übergabe auf 2 Arten möglich sein. Einmal durch den aufruf von

a.out 3 4 5 2 3 4 5 ...

Das ist soweit auch kein Problem. Als zweites soll es nun möglich sein Über folgenden aufruf das gleiche zu tun:

a.out < sort.dat

wobei sort.dat eine Datei ist die folgendermassen aussieht:

4
20
18
...

Mein Problem ist nun, dass ich nicht weis wie ich dann auf die Werte zugreifen kann. Ich dachte zuerst, dass über a.out < sort.dat die Werte automatisch übergeben werden und ich dann wie bei der ersten Möglichkeit auf die Werte zugreofe, aber so scheint es nicht zu gehen oder mache ich was falsch?
 
richtet sich deine Frage also in die Richtung, wie Du diese Zahlenwerte aus der Datei in Dein Programm bekommst, die Werte also auslesen kannst?
 
Hi.
Das ist soweit auch kein Problem. Als zweites soll es nun möglich sein Über folgenden aufruf das gleiche zu tun:

a.out < sort.dat
Hierbei werden an das Programm a.out keine Parameter übergeben (argc == 1), stattdessen wird die Datei sort.dat von der Shell an die Standardeingabe des Programmes umgeleitet. D.h. du mußt einfach nur z.B. mit scanf von der Standardeingabe die Werte einlesen.

Gruß
 
Das hat mich schonmal ein Stück weiter gebracht.
Ich hab jetzt folgenden Code:

Code:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   int c;
   while((c=getc(stdin)) != EOF)
      putc(c,stdout);
   return EXIT_SUCCESS;
}

Falls das Programm nun aber ohne < sort.dat aufgerufen wird, erwartet das Programm eine eingabe von der tastatur (logisch). Wie kann ich prüfen, ob < sort.dat auch angegeben wurde.
 
Das hat mich schonmal ein Stück weiter gebracht.
Ich hab jetzt folgenden Code:

Code:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   int c;
   while((c=getc(stdin)) != EOF)
      putc(c,stdout);
   return EXIT_SUCCESS;
}

Falls das Programm nun aber ohne < sort.dat aufgerufen wird, erwartet das Programm eine eingabe von der tastatur (logisch). Wie kann ich prüfen, ob < sort.dat auch angegeben wurde.
Ob eine Umleitung stattgefunden hat kannst du in deinem Programm nicht feststellen. Aber du kannst prüfen, ob dem Programm Argumente übergeben wurden oder nicht. Wenn keine Argumente angegeben wurden, dann ist der erste Parameter der main Funktion gleich 1; größer 1 anderenfalls.

Außerdem solltest du lieber zeilenweise einlesen und nicht zeichenweise (das geht mit fgets).

Gruß
 
Zurück