If statement Fortran 77中包含字符变量的if/then语句有问题

If statement Fortran 77中包含字符变量的if/then语句有问题,if-statement,fortran,character,fortran77,word-count,If Statement,Fortran,Character,Fortran77,Word Count,我目前正试图用Fortran 77编写一个程序,计算文本文件中的字数。文本文件如下所示: program COUNT implicit none character text*100000 integer i, a, nw nw=1 !number of words open(9, FILE='file.

我目前正试图用Fortran 77编写一个程序,计算文本文件中的字数。文本文件如下所示:

       program COUNT
       implicit none

       character text*100000
       integer i, a, nw
       nw=1 !number of words                                                     

       open(9, FILE='file.txt', STATUS='old')
       read(9, '(A)') text

       a=0
  10   do i=1, LEN_TRIM(text)
          if (text(i:i) .ne. " ") then
             if (a .eq. 0) then
                goto 10
             else
                a=0
                nw=nw+1
                goto 10
             endif
          else
             if (a .eq. 0) then
                a=a+1
                goto 10
             else
                goto 10
             endif
          endif
       enddo

       print *, "Number of words: ", nw

       end
你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界。你好,世界

我的程序目前如下所示:

       program COUNT
       implicit none

       character text*100000
       integer i, a, nw
       nw=1 !number of words                                                     

       open(9, FILE='file.txt', STATUS='old')
       read(9, '(A)') text

       a=0
  10   do i=1, LEN_TRIM(text)
          if (text(i:i) .ne. " ") then
             if (a .eq. 0) then
                goto 10
             else
                a=0
                nw=nw+1
                goto 10
             endif
          else
             if (a .eq. 0) then
                a=a+1
                goto 10
             else
                goto 10
             endif
          endif
       enddo

       print *, "Number of words: ", nw

       end
我是在纸上做的,它应该可以工作,但是,我的程序陷入了do循环。我认为这可能与这一说法有关:

       if (text(i:i) .ne. " ") then

我可以这样写逻辑表达式吗?如果没有,是否有人对我如何重写这段代码有任何提示?如果我的程序有点混乱,我很抱歉;我在这方面比较新。我正在努力提高我的编码技能来做计算化学。非常感谢你的帮助

所有if分支都转到
转到10
,它指向循环的开始。无法结束,因为这将从头开始重新启动循环。不要使用goto开始新的迭代
end Do
s,我建议学习Fortran 95。您已经使用了其中一些:
len\u trim
。自由格式的源代码布局更易于使用,并且该语言具有许多附加功能。看,你真的不需要任何goto 10。或者,如果您想让它们进入,请将它们更改为cycle(这意味着转到下一个迭代)。我不建议使用
cycle
,因为它来自Fortran 90。
(自由格式+小写关键字)/=Fortran 77
,我认为len_trim是Fortran 77函数。我同意Fortran 95更容易使用,但是,我下学期的计算材料科学课是以Fortran 77为基础的。我更愿意用Fortran 95或C/C++编写代码。在cup中,我删除了第二个和第三个GOTO,并用循环替换了第一个和最后一个GOTO。这使我的计划得以实施。Vladimir F,你也对,goto是不必要的,然而,我能够用cycle修复程序。Kyle,我用emacs编写代码,所以我不必担心自由形式的问题,但我相信Fortran 77允许使用小写关键字。