2017-12-28 11 views
1

sind Meine Codes unten geschrieben:Fehler: Fehlendes Komma in einem FORMAT-Statement

DIMENSION T(10) 
DATA A,B /9.,5./ 
IS=1 
J=J+3 
T(j-2)=A 
T(J-1)=A-B 
80 T(J)=T(1)+T(J-1) 
J=J+1 
IF(J.NE.10) GOTO 80 
DO I=1,5 
WRITE (*,15) I, T(J) 
END DO 
15 FORMAT ('T('I2')=', F8.4) 
STOP 
END 

Mein Übersetzungsfehler unten geschrieben:

jdoodle.f95:13:16: 

15 FORMAT ('T('IS')=', F8.4) 
       1 
Error: GNU Extension: Missing comma at (1) 
jdoodle.f95:11:20: 

WRITE (*,15) I, T(J) 
        1 
Error: FORMAT label 15 at (1) not defined 

Könnten Sie mir bitte sagen, wo die falsche Aussage meines ist Fortran-Code? Das Ergebnis muss T (1) = nnn.0nnn sein, denke ich.

+2

versuchen '('T (', I2, ') =', F8.4)' Der zweite Fehler folgt nur, weil das beschriftete Format ungültig war – agentp

+0

Vielen Dank! Es hat funktioniert, aber die Ergebnisse sind nur Nullen ?? – Bay

+0

'j' wird niemals initialisiert. Versuchen Sie "j = 3" anstelle von "j = j + 3" – agentp

Antwort

0

Vielen Dank, ich habe gerade eine Lösung gefunden!

Der Code ist:

DIMENSION T(10) 
DATA A,B /9.,5./ 
IS=1 
J=J+3 
T(J-2)=A 
T(J-1)=A-B 
80 T(J)=T(1)+T(J-1) 
J=J+1 
IF(J.NE.10) GOTO 80 
DO I=1,5 
WRITE (*,15) I, T(I) 
END DO 
15 FORMAT ('T(',I2,')=',F8.4) 
STOP 
END  

Das Ergebnis ist:

T(1)= 9.0000 
T(2)= 4.0000 
T(3)= 13.0000 
T(4)= 22.0000 
T(5)= 31.0000 

Danke.

+1

seit Sie als Antwort gepostet haben, lesen Sie bitte meinen Kommentar zur Initialisierung von 'j' Dies wird Sie beißen, wenn Sie jemals Compiler ändern. – agentp

0

Wie klagen die Formatspezifikation ersetzt mit

15 FORMAT ('T(',I2,')=',F8.4) 

stoppt den Compiler zu sehen ist, werden. Ich antworte jetzt allgemeiner.

Eine Formatspezifikation kann aus mehreren Formatelementen bestehen, wobei jedes Element ein Editierdeskriptor oder (rekursiv) eine eingeklammerte Liste von Formatelementen ist.

Es ist normalerweise notwendig, jedes Formatelement durch ein Komma zu trennen. Im Format der Frage sind die Editierdeskriptoren 'T(', I2 und ')='. [Der erste und der letzte sind Zeichenkettenbearbeitungsdeskriptoren und der zweite ist ein Datenbearbeitungsdeskriptor.] Kein Komma zwischen den zwei Paaren darf weggelassen werden.

Vom Fortran 2008-Standard wird das Komma erlaubt nur in folgenden Fällen verzichtet werden:

  • zwischen einer P Bearbeitungsbeschreibung und ein unmittelbar folgenden F, E, EN, ES, D oder G Editierdeskriptor, möglicherweise mit vorheriger Spezifikation;
  • vor einem Schrägstrichbearbeitungsdeskriptor, wenn die optionale Wiederholungsspezifikation nicht erscheint;
  • nach einem Schrägstrich Bearbeitungsdeskriptor;
  • vor oder nach einem Doppelpunkt Bearbeitungsdeskriptor.

Natürlich, nur weil solche Kommas weggelassen werden können, bedeutet das nicht, dass sie sein sollten. Ein optionales Komma-Präsent zu haben tut nie weh.

Weiter, wie durch die Nachricht des Compilers vorgeschlagen, kann ein Compiler die Abwesenheit von Kommas akzeptieren, selbst wenn ein kompatibles Programm sie haben muss (obwohl der Compiler in der Lage sein muss, solche Nichteinhaltung zu erkennen). Als persönliche Aussage würde ich vorschlagen, solche nicht standardisierten Schriften zu vermeiden.


Wie in den Kommentaren, auch mit der korrigierten Formatspezifikation festgestellt worden ist, ist das Programm noch nicht gültig: mit j=j+3 vor j wird zunächst definiert ist nicht erlaubt.