Je veux afficher la progression d'un calcul effectué avec une boucle DO-boucle, sur l'écran de la console. Je peux imprimer la variable de progression du terminal comme ceci: La sortie du code ci-dessus sur l'écran de la console est la suivante: p> Tout sur la même ligne, enveloppé uniquement par la fenêtre de la console. P> L'avance est: p> au lieu de: < / p> en raison du descripteur d'édition TL4. p> à partir de ces deux instances, on peut conclure que la déclaration d'écriture ne peut pas écraser quoi a été écrit par une autre déclaration d'écriture ou par une exécution antérieure de la même satire d'écriture (comme dans une boucle do-boucle). p> peut-il être surmonté d'une manière ou d'une autre? p> J'utilise le Compilateur FTN95 sur Windows 7 RC1. (Le programme d'installation du compilateur G95 BluesCreens Windows 7 RC1, a même pensé que cela fonctionne bien sur Vista.) P> Je sais sur la question Suspressing Line Breaks in Fortran 95 Écrire des déclarations , mais cela ne fonctionne pas pour moi, car la réponse à cette question signifie que la nouvelle iPVOut est ajoutée à la sortie précédente sur la même ligne; Au lieu de nouvelle sortie écraser la sortie précédente. P> Merci d'avance. p> p>
4 Réponses :
Il n'y a pas de solution à cette question dans le cadre des normes FORTRAN. Toutefois, si votre compilateur comprend la barre oblique inverse des chaînes de Fortran (GNU FORTRAN fait si vous utilisez l'option ceci utilise le caractère barre-backslash ( nb: Si votre compilateur ne comprend pas -fbackslash code>), vous pouvez écrire \ b code>) pour effacer les caractères précédemment écrits sur cette ligne. p> avancée = "non" code>, vous pouvez utiliser Trucs non standard associés, tels que l'utilisation du spécificateur $ code> dans la chaîne de format. p> p>
Comme le dit le Dr Fortran m'a signalé à Ce fil , si Vous utilisez c_backspace code> à partir du module iso_c_binding code>, vous n'avez pas besoin d'options de compilateur spéciales. La commande write serait répéter (c_backspace, 3) // "gee" code> au lieu de "\ b \ b \ bgee" code>.
De plus, si vous utilisez ifort code>, vous devrez appeler flush code> après chaque commande écrire code>.
Les éléments suivants doivent être portables sur des systèmes à l'aide de ACHAR (13) code> pour coder le retour du chariot. character*1 creturn
! CODE::
creturn = achar(13) ! generate carriage return
! other code ...
WRITE( * , 101 , ADVANCE='NO' ) creturn , i , npoint
101 FORMAT( a , 'Point number : ',i7,' out of a total of ',i7)
Vous devez utiliser les balises [code /] (ou indenter) à la syntaxe mettez en surbrillance votre code et le rendre plus lisible. :)
OPEN(6,CARRIAGECONTROL ='FORTRAN') DO I=1,5 WRITE(6,'(1H+" ",I)') I ENDDO
Généralement, les réponses sont beaucoup plus utiles s'ils incluent une explication de ce que le code est destiné à faire et pourquoi cela résout le problème sans introduire d'autres personnes. (Ce message a été signalé par au moins un utilisateur, probablement parce qu'ils pensaient qu'une réponse sans explication devrait être supprimée. Ou peut-être que "probablement" leva leurs hackles.)
Cela mérite une explication. Remarque carriagecontrol = code> n'est pas une unité de conformité et de réouverture standard 6 (supposons qu'il s'agit de la sortie_unit) peut être délicate, en particulier avec des spécificateurs non standard. De plus, les hollérithes sont supprimés de Modern Fortran. Vous devez expliquer la signification du le 1H + "" code>. De plus, dans la standard fortran, vous devez utiliser i0 code>, juste i code> n'est pas autorisé.
Les suivants ont parfaitement fonctionné à l'aide de G95 FORTRAN:
NF = NF + 1
IF(MOD(NF,5).EQ.0) WRITE(6,42,ADVANCE='NO') NF, ' PDFs'//CHAR(13)
42 FORMAT(I6,A)
Quel compilateur et système d'exploitation êtes-vous?
@DigitalRoss, Compiler = FTN95, OS = Windows 7 RC1
Peut-être que vous devriez accepter une réponse?