Fortran: `READ(*,*)` != Command-line Argumente. Wie verwenden von Befehlszeile-Argumente?
GCC version 4.6
Das Problem: einen Weg Zu finden, um die feed-in-Parametern und der ausführbaren Datei, sagen a.out
von der Befehlszeile aus - genauer gesagt-feed in ein array von double-precision-zahlen.
Versuch: Mit der READ(*,*)
Befehl, die älteren in der standard:
Programm test.f
-
PROGRAM MAIN
REAL(8) :: A,B
READ(*,*) A,B
PRINT*, A+B, COMMAND_ARGUMENT_COUNT()
END PROGRAM MAIN
Ausführung -
$ gfortran test.f
$ ./a.out 3.D0 1.D0
Funktionierte dies nicht. Auf ein bisschen soul-searching, festgestellt, dass
$./a.out
3.d0,1.d0
4.0000000000000000 0
funktioniert, aber die zweite Zeile ist ein Eingabe-prompt, und das Ziel, dies in eine Zeile ist nicht erreicht. Auch die COMMAND_ARGUMENT_COUNT()
zeigt, dass die zahlen fließen in die Eingabe-Aufforderung nicht wirklich zählen "command line arguments', im Gegensatz zu PERL.
- Sie konnte tun 'echo "3 1" | ein.out " mit Ihrem code. Nicht, dass ich würde empfehlen, aber vielleicht hilft Sie verstehen, was read(*,*) ist.
- Es funktioniert!! danke @george . Ich habe versucht
./a.out | echo '3.1d0 1.d0'
früher .. und es hat nicht funktioniert. Und es ist besser für meine Zwecke, weil auf diese Weise ein format muss nicht angegeben werden, erscheint natürlicher .. und allgemein zu mir!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, um die Argumente gefüttert, um Ihr Programm auf der Befehlszeile, verwenden Sie die (seit Fortran 2003) standard intrinsische Unterprogramm
GET_COMMAND_ARGUMENT
. So etwas wie dies funktionieren könnteHinweis:
get_command_argument
ist eine Charakter-variable, die Sie haben, zu analysieren, um sich in einen echten (oder was auch immer). Beachten Sie auch, dass ich darf nur 12 Zeichen in jedem element derargs
array, möchten Sie vielleicht zu hantieren herum.read
ist nicht zum Lesen der Kommandozeilen-Argumente in Fortran-Programme.Seit Sie Lesen möchten, ein array von real-zahlen, könnten Sie besser dran, mit dem Ansatz hast du bereits herausgefunden, dass das Lesen Ihnen aus der Klemme, nachdem das Programm gestartet wurde, es ist bis zu Ihnen.
namelist
input-Datei aus, deren name als Kommandozeilen-argument.READ(*,*)
wie die Analyse gemacht werden soll in Fortran 2003?read (*,*)
ist in standard-Fortran für eine Liste-gerichtet Lesen von der Standardeingabe. Die meisten Betriebssysteme schließen die standard-Eingabe an das terminal. Es ist nichts falsch mit es, obwohl es in der Sprache eine lange Zeit. Eine gute Webseite für Fortran-95-Funktionen: en.wikipedia.org/wiki/Fortran_95_language_features