Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran “英特尔编译器返回”;在语句结束时找到格式“U元素”;_Fortran_Intel Fortran - Fatal编程技术网

Fortran “英特尔编译器返回”;在语句结束时找到格式“U元素”;

Fortran “英特尔编译器返回”;在语句结束时找到格式“U元素”;,fortran,intel-fortran,Fortran,Intel Fortran,如下面我用来练习固定格式Fortran的代码所示(因为我试图学习的代码是固定格式Fortran),第4个format语句和从文件1读取的内容是新添加的。在添加这些语句之前,代码按预期工作,但现在不带附加标志的“英特尔ifort编译器”将不会编译第四个format语句,并返回以下错误: fortPractice.for(18): error #5082: Syntax error, found FORMAT_ELEMENT 'format' when expecting one of: <E

如下面我用来练习固定格式Fortran的代码所示(因为我试图学习的代码是固定格式Fortran),第4个format语句和从文件1读取的内容是新添加的。在添加这些语句之前,代码按预期工作,但现在不带附加标志的“英特尔ifort编译器”将不会编译第四个format语句,并返回以下错误:

fortPractice.for(18): error #5082: Syntax error, found FORMAT_ELEMENT 'format' when expecting one of: <END-OF-STATEMENT> ;

        4     format(i6,2x)
--------------^

fortPractice.for(26): error #6052: This label has not been defined as a FORMAT label. 
                          write(2,3)
----------------------------------^
输出是由程序创建的文件。test.txt只包含一行数字:1 2 3 4 5 6

当我注释或删除第4个format语句时,代码将按预期编译和运行。由于我正在学习固定格式Fortran是如何工作的,所以我只对第4格式语句无法编译的原因感兴趣

编辑: 我已经用空格替换了所有选项卡,下面显示的经过更多修改的程序现在可以编译了,但是程序没有生成输出文件,可能遇到了一些运行时错误:

编辑2: 没关系,我忘了更改文件标识符


谢谢大家

现在我们有足够的信息来解决这个问题。在“麻烦源”行中,标签4前面有一个制表符。Fortran源代码中的制表符不是标准制表符,但Intel Fortran(和许多其他编译器)支持称为“制表符源代码格式”的东西。它在ifort中的工作方式如下:

  • 如果行以制表符开始,然后是非零数字,则该数字将被视为第6列中的数字
  • 如果行以制表符开头,然后是其他字符,则该字符将被视为第7列中的字符
  • 如果行以数字语句标签开始,然后是制表符,则下一个字符将被视为第7列中的字符
  • 否则,选项卡将被视为空白(最后一个选项卡因编译器而异)

在您的例子中,4前面有一个选项卡,因此它被视为前一行的延续,从而导致错误。要么不要使用制表符,要么理解编译器如何处理它们。自动插入制表符的编辑器只会给您带来麻烦。

这些都是您从发布的程序中获得的消息吗?作为旁注,不要使用单元1和2进行读写,它们可能已经在使用,请使用单元>10。请检查源代码中是否有任何选项卡。如果我复制您显示的代码并将其粘贴到.f文件中,ifort编译得很好。顺便说一下,您发布的代码中只有三种格式。标签为4的是第三个。这个症状向我暗示了一个延续的问题,你在这里发布的内容并不能证明这一点。你在这里发布的源代码中确实有一个标签。这可能就是问题所在:您不能使用选项卡。如果这只是你如何在这里发布的一个人工制品,那么还有其他错误,但是你应该检查一下。如果我将“4”标签放在第6列,或者如果我在4前面加了一个标签(这使4的行为与第6列中的一样),我可以准确地再现症状。谢谢!现在,最初的问题得到了回答。我采纳了Albert的建议,并对文件使用了不同的数字,现在代码将运行,但不会生成输出文件。
c     This is a script for practicing Fortran codes
      program fortPractice
          implicit none

          integer :: x(0:5),y(2:7)
          integer :: nph(1:6)
          real :: z(4:9)
          integer :: i

          OPEN(unit=1,file='test.txt',status='old')
          read(1,*) nph
          close(unit=1)

          open(unit = 2, file = 'output.txt')

    2     format(i3,2x,i3,2x,2e11.2)
    3     format(1x,78('*'))
    4     format(i6,2x)

          do i = 0,5
              x(i) = i;
              y(i+2) = i+2;
              z(i+4) = x(i)**2 + y(i+2)**2
              z(i+4) = sqrt(z(i+4)) + 10000
              write(2,2) x(i),y(i+2),z(i+4)
              write(2,3)
          enddo
          write(2,*) nph

          close(unit = 2)

      endprogram fortPractice