Fortran Coder

标题: 关于fortran的GETARG使用 [打印本页]

作者: jeydragon    时间: 2018-4-17 17:01
标题: 关于fortran的GETARG使用
之前电脑用的是win7,VS2008+IVF2011
目前用的是win10,依旧是VS2008+IVF2011,昨天软件还是VS2013+IVF2013本以为是版本问题,现在看来不是,说问题吧,下面是程序:
[Fortran] 纯文本查看 复制代码

      Program Coef_differ


        implicit none
      integer*4 nargs,iargc,i,dg,od,dgmx,odmx,l,m,ln
        integer*4 l1,m1,l2,m2,dotp
        integer*4 stat1,stat2
      character*160 cha,g1file,g2file,g3file,df_file
        character*70 header
        character(len=1):: dot='.'
        logical back
        real*8 dt1,dt2,C1,S1,C2,S2,dC,dS,GM,Rd
        nargs=iargc()

      call get_command_argument (1,cha)
          g1file=cha
        call get_command_argument (2,cha)
          g2file=cha
      write(*,*) g1file
        write(*,*) g2file
          dotp=scan(g1file,dot,back) !求出"."的位置
          g3file=g1file(1:dotp-1)
          df_file=g3file(1:len_trim(g3file))//'_df.coe'


      open(10,file=g1file,status='old')
        open(11,file=g2file,status='unknown')
      open(12,file=df_file,status='unknown')

      do
           read(10,"(2I12,2D24.15)",iostat=stat1) l1,m1,C1,S1
               if(stat1/=0) exit
           read(11,"(2I12,2D24.15)",iostat=stat2) l2,m2,C2,S2
               if(stat2/=0) exit

          if (l1 .eq. l2) then
             if (m1. eq. m2) then
                dC=C1-C2
                dS=S1-S2
                write(12,'(2I12,2D24.15)') l1,m1,dC,dS
                 else
                write(*,*) 'file format not match in order'
                   endif
          else
             write(*,*) 'file format not match in degree'
          endif      
      enddo
        End Program Coef_differ

coefdiff.f (1.65 KB, 下载次数: 2)



作者: fcode    时间: 2018-4-17 22:12
你并没有说问题。
作者: jeydragon    时间: 2018-4-18 17:04
fcode 发表于 2018-4-17 22:12
你并没有说问题。

好像中途出了问题,我又编辑了一下,问题被吃了,我再 陈述一下。

问题是:调试没法通过,总是说找不到“10”这个文件,我只是希望能够顺利编译,得到exe文件即可,但是总是报错,达不到目的,不知道什么原因?记得之前直接调试一下是可以正常通过的,然后我通过bat 命令,传递参数来实现,不知道是不是与系统有关,劳烦老大了。
作者: jeydragon    时间: 2018-4-18 17:26
fcode 发表于 2018-4-17 22:12
你并没有说问题。

记得应该有个编译的功能,或者是选项,就是只是让编译通过即可。

因为最近两三年没怎么接触了,有些忘记了,不好意思,老大提醒一下即可。
作者: fcode    时间: 2018-4-18 19:17
代码有问题的话,不可能编译通过。

找不到文件,你需要先判断文件名是否符合你的预期?根据参数给定的文件名,那么参数是否进来了。
如果符合你的预期,那么文件路径是否正确?扩展名是否正确?
作者: jeydragon    时间: 2018-4-18 20:09
fcode 发表于 2018-4-18 19:17
代码有问题的话,不可能编译通过。

找不到文件,你需要先判断文件名是否符合你的预期?根据参数给定的文件 ...

你看一下下面这两个图,第一个图我选择 生成----重新生成。

第二个图,我选择调试:

我这里只是调试,不让运行的,也就是我希望他们只是编译一下即可,生成一个exe文件。



作者: fcode    时间: 2018-4-18 22:31
调试就是(特殊状态)的运行。
只要你能运行(或调试)了,不管运行(或调试)是否出错,那么exe就是生成了。(换句话说,没有exe生成,你压根就运行不起来)

文件没有找到,是因为你没有传递进去参数。你把参数传递进去了,就能找到输入文件了。

作者: jeydragon    时间: 2018-4-19 09:17
fcode 发表于 2018-4-18 22:31
调试就是(特殊状态)的运行。
只要你能运行(或调试)了,不管运行(或调试)是否出错,那么exe就是生成了 ...

确实的Debug下生成有一个exe文件,可是这个文件才二十多k,不是最终想要的结果。

话说回来,我这个时候还没有让传递参数呢,通过get_command_argument 这个函数来实现,在dos输入或者bat来传递,因为数据比较大,希望编译通过之后,用一个bat文件传递进去。

目前只是希望通过编译通过,就是就是我这个程序语法各方面没太大问题,并且这个程序之前一直存在(在别的电脑别的系统),程序应该是没太大问题。
作者: jeydragon    时间: 2018-4-19 09:18
fcode 发表于 2018-4-17 22:12
你并没有说问题。

你可以先大概看一下这个程序呀

目的就是通过读入两个文件,然后让两个文件里对应项做差。

因为文件太多,不方便一下子打开太多个,就这种参数传递,只需要两个文件号就行了。
作者: fcode    时间: 2018-4-19 12:00
我的每一个回答,都认真看过提问者的问题和代码。
Debug 下的 exe 就是你要的结果。如果还有其他问题,请描述后继续提问。
你的代码里,如果不传递参数,必然是 file not found。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2