2016-10-25 4 views
4

Ich habe ein interaktives FORTRAN-Programm, das verschiedene Eingaben vom Benutzer erfordert. Jetzt möchte ich die Ausgabe dieses Fortran-Programms in einer Variablen speichern und diesen Wert in einem Shell-Skript verwenden. Ich habe versuchtAusgabe eines Fortran-Programms in eine Variable

var=`./test` and var=$(./test) 

, aber in beiden Fällen, es fordert den Benutzer nicht zur Eingabe auf und bleibt im Leerlauf. Was soll ich machen? Ein Stück Beispiel Fortran-Code ist wie folgt

test.f 

    program test 
    character*1 resp1, resp3 
    integer resp2, ans 

    write(*,*) 'Think of a prime number less than 10' 
    write(*,*) 'Say whether it is odd or even' 
    write(*,*) 'Write o/e' 
    read(*,*) resp1 
    if (resp1 .EQ. 'e') then 
    ans=2 
    else 
    write(*,*) 'Is the number close to 4 or 8' 
    read (*,*) resp2 
    if (resp2 == 8) then 
    ans=7 
    else 
    write(*,*) 'Is the number greater than or less than 4' 
    write(*,*) 'Write g or l' 
    read (*,*) resp3 
    if (resp3 .EQ. 'l') then 
    ans=3 
    else 
    ans=5 
    end if 
    end if 
    end if 
    write(*,*) ans 
    end 

    Compiled as gfortran test.f -o test 

Dann habe ich ein Skript wie diese

test.sh 

var=`./test` 
echo "The answer you are looking for is " $var 

Ich glaube, es ist etwas sehr trivial ist, dass ich nicht in der Lage bin zu finden. Bitte hilf mir.

P.S. Dies ist nur ein Beispiel Code und Skript und mein tatsächliches Skript und Code ist sehr unterschiedlich.

+2

Eingabeaufforderung und Variablenausgabe werden zusammengeführt. Nicht sicher, ob das möglich ist, aber könnten Sie den Benutzer anstelle der Standardausgabe auf Standardfehler hinweisen? Das würde funktionieren. –

+0

Lass mich es versuchen. Meinst du mit $? ? –

+0

Ich ermutige Sie sehr, stattdessen Fortran zu schreiben. Siehe: http://www.fortran90.org/src/best-practices.html – jlokimlin

Antwort

3

Jean-François Fabre hat Recht.

program test 
character*1 resp1, resp3 
integer resp2, ans 

write(0,*) 'Think of a prime number less than 10' 
write(0,*) 'Say whether it is odd or even' 
write(0,*) 'Write o/e' 
read(5,*) resp1 
if (resp1 .EQ. 'e') then 
ans=2 
else 
write(0,*) 'Is the number close to 4 or 8' 
read (5,*) resp2 
if (resp2 == 8) then 
    ans=7 
else 
    write(0,*) 'Is the number greater than or less than 4' 
    write(0,*) 'Write g or l' 
    read (5,*) resp3 
    if (resp3 .EQ. 'l') then 
    ans=3 
    else 
    ans=5 
    end if 
end if 
end if 
write(6,*) ans 
end 

Fragen sind stderr (0), sind stdin Antworten (5), Ergebnis stdout (6)

var=`./test` 

arbeitet danach in Ordnung.

+0

0, 5 und 6? Nur aus Neugier, was sind 1, 2, 3 und 4? –

+1

Vielen Dank. Es klappt. Ich habe immer geschrieben (*, *). Ich habe heute die Wichtigkeit der Zahlen erkannt. –

+1

@JamesBrown: Soweit ich weiß, können sie als Dateien definiert werden. 0,5 und 6 ist nur eine alte Konvention, fast wie alles andere in Fortran: D https://en.wikipedia.org/wiki/Standard_streams –

Verwandte Themen