Frage

Lassen Sie mich zunächst sagen, mit einer Hausaufgabe zugeordnet ist. Dies ist jedoch ein sehr kleiner und relativ unbedeutender Teil des Auftrages.

Das C-Programm empfängt über Kommandozeilenargument Eingang, aber es muss in Form sein:

$ ./program < input

Wie würde ich mich über diesen Eingang als String empfangen? Jedes Mal, wenn ich versuche, das dritte Argument von argv auszudrucken erhalte ich diese Meldung:

  

Eingang:. Keine solche Datei oder das Verzeichnis

War es hilfreich?

Lösung

sed.

Wenn ich raten müsste würde ich denken, die:

input: No such file or directory.

wird aus der Schale kommen, da sie nicht in der Lage ist, die Datei zu öffnen angegeben:. „Eingang“

Auf der anderen Seite, wenn Sie tatsächlich die < input als Argumente für Ihr Programm möchten, können Sie sie entkommen oder zitieren so die Shell sie nicht interpretiert. (Flüchten für den Leser als Übung: -)).

Andere Tipps

Die ./program < input Syntax ist eine spezielle Shell-Syntax „adressiert alles in der Datei mit dem Namen input zum Standardeintrag des Programms“ zu sagen.

Um die Eingabe zu lesen, das Programm nur die Standardeingabe zu lesen Funktionen verwenden muß, Linie fgets oder scanf.

Auf * nix-Systemen, wird es nicht sein ein drittes Element von argv. Wenn Sie auf fast jedem Unix-artig Shell diesen Befehl ausführen, wird es ähnlich sein, dies zu tun:

cat input | ./program

So Ihre ./program nur ein Element in argv haben, aber es ist stdin die Datei input ist, so die Datei lesen würden Sie gerade von stdin lesen. Beachten Sie, dass dies eine absolut gültige Art und Weise ist Ihr Programm zu entwerfen. Viele Unix-Programme von der Standardeingabe lesen, wenn keine Dateien angegeben werden, damit ihr Rohr in einer Eingabe von anderen Programmen (oder in diesem Fall von Dateien).

Was kommt nach dem < ist kein Befehlszeilenargument. Der Inhalt der Datei wird von dem Shell in das Programm geleitet werden.

Alles, was Sie tun müssen, ist von stdin gelesen und Sie den Inhalt der Datei.

Sie müssen die ‚<‘ entkommen, sonst Shell wird es analysieren und Programm erhalten sie nicht in Befehlszeile.

Wenn Sie mit bash, dann:

./program '<' input

oder

./program \< input

Andere Shells könnte es anders machen (zum Beispiel Windows-Standard, cmd.exe verwendet ^ als Escape-Zeichen, nicht \).

Dies ist eine Unix-Shell-Sache. Die Form someprogram < somefile sagt EinProgramm mit somefile als seine Eingabe auszuführen. Wenn Sie etwas andere Beteiligung des < Symbols tun wollen, müssen Sie es zitieren.

Das < bedeutet, dass das Programm lesen, es ist die Standardeingabe (stdin) aus der benannten Datei (Input). Also nur von stdin gelesen (mit fgets, fread, etc).

Lassen Sie aus dem '<'. Sie wollen Befehlszeilenargumente dies zu tun:

  

$ ./program -Dflag sieben = Ixnay FromDinger

In der Anwendung, versuchen Sie dies:

int main( int argc, char **argv )
{
   int i;
   for( i = 0 ; i < argc ; ++i )
      printf( "Arg %d = %s\n", i, argv[i] );
   return 0;
}

Sie werden bemerken, dass das erste Argument der Name der ausführbaren Datei ist (bei Index 0), und die zweite Argument (bei Index 1) wird "-Dflag"

Eigentlich ist dies eine sehr verbreitete Technik bei der Programmierung Turnieren eingesetzt. Die Daten Ihr Programm wird in einer Datei gespeichert sind, lassen Sie uns data.txt sagen, und dann auf Ihre Anwendung umgeleitet die „<“ auf der Schale verwendet wird, wie folgt aus: ./ Programm

Also, in Ihrem Quellcode, was Sie brauchen, ist so etwas wie dies zu tun:

#include <iostream>
#include <string>

using namespace std;

int main(void)
{
    string tmp;
    string full_content;

    while (cin >> tmp)
        full_content += " "+tmp;

    cout << full_content << endl;
}

.. und Sie werden alle Daten aus der Datei auf einer Schnur (und durch Leerzeichen getrennt) erhalten.

Das ist eine Möglichkeit, es zu tun, ich hoffe, es hilft. [] 'S

Sie können es von stdin zu lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top