Fortran Coder

查看: 99|回复: 4
打印 上一主题 下一主题

[求助] 请教,输入输出黑色视窗不出现的原因

[复制链接]

8

帖子

1

主题

0

精华

入门

F 币
42 元
贡献
16 点
跳转到指定楼层
楼主
发表于 2024-12-7 10:15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教:在给从前写的fortran加了一个对话框截面后,原来程序运行时闪出来的输入输出黑色视窗(就是我们常用来测试软件安装是否成功时写“hi world!”出现的视窗)不再出现了,程序也不往下走了,这是缺少什么语句?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2024-12-7 10:53:58 | 只看该作者
请给出以下信息:
1. 你使用什么操作系统,使用什么编译器?
2. 选择的什么类型的工程?(Console / QuickWin / Win32 APP )
3. 给出必要代码或截图

8

帖子

1

主题

0

精华

入门

F 币
42 元
贡献
16 点
板凳
 楼主| 发表于 2024-12-7 12:31:56 | 只看该作者
win10系统,用的是vs fortran+winteracter
Console
代码贴进来  不会

8

帖子

1

主题

0

精华

入门

F 币
42 元
贡献
16 点
地板
 楼主| 发表于 2024-12-7 12:33:50 | 只看该作者
[Fortran] 纯文本查看 复制代码
       Module Global
         Use Winteracter      !// 使用 Winteracter
         Use Resid            !// 使用 Resid 资源ID
         Implicit None
       End Module Global
!
       PROGRAM dushu
       Use Global
       Implicit None
! 参数定义
       TYPE(WIN_MESSAGE)  :: MESSAGE
       LOGICAL :: QUIT=.FALSE.
       INTEGER :: ITYPE,I,J,ijk
! 需要通过界面对话框读入下面的数据
       INTEGER :: NVC,NPC,NJQ,NN              ! 竖曲线个数,平曲线个数,禁区个数
       REAL :: LSTART,LEND                    ! 起始里程,结束里程,最好涵盖所要的范围;
       REAL :: CHPL(105)                      ! 竖曲线的变坡点里程(NVC)
       REAL :: CHPR(105)                      ! 竖曲线的变坡点半径(NVC)
       REAL :: CHPI(106)                      ! 竖曲线的各段坡度 (NVC+1)
       REAL :: XYZ0(3)                        ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
       REAL :: NALF                           ! 平曲线第一段导线方位角
       REAL :: JD(51)                         ! 导线长度累计,与曲线个数对应(NPC+1)
       REAL :: PR(50)                         ! 平曲线半径(NPC)
       REAL :: ALF(50)                        ! 导线相对前一导线的偏角,逆时针为正(NPC)
       REAL :: LS(50)                         ! 平曲线的缓和曲线长(NPC)
       REAL :: XXT(66),XDT(66)                ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
       REAL :: X(40000),Y(40000)              ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
!
        CALL WInitialise()                    ! 初始化窗口
        CALL WindowOpen(HideWindow)           ! 此演示不需要根窗口,因此要隐藏它
!  开始窗口程序(用于替代原输入数据部分)               
        CALL WDialogLoad(IDD_DIALOG001)
        CALL WDialogShow(itype=Modeless)
!
        ijk=0
!****************************************************
           DO WHILE(.NOT.QUIT)   
           CALL WMessage(ITYPE,MESSAGE)         
              SELECT CASE (ITYPE)
              CASE (PushButton) 
                  SELECT CASE (MESSAGE%VALUE1)
                  CASE (IDOK)                   
                   CALL WDialogGetInteger(IDF_INTEGER1,NVC)  !获取输入的数据NVC
                   CALL WDialogGetInteger(IDF_INTEGER2,NPC)  !获取输入的数据NPC
                   CALL WDialogGetInteger(IDF_INTEGER3,NJQ)  !获取输入的数据NJQ
                   CALL WDialogGetInteger(IDF_INTEGER4,NN)   !获取输入的数据NJQ
                   CALL WDialogGetReal(IDF_REAL1,LSTART)     !获取输入的数据LSTART
                   CALL WDialogGetReal(IDF_REAL2,LEND)       !获取输入的数据LEND
                   CALL WDialogGetReal(IDF_REAL3,XYZ0(1))    !获取输入的数据XYZ0(1)
                   CALL WDialogGetReal(IDF_REAL4,XYZ0(2))    !获取输入的数据XYZ0(2)
                   CALL WDialogGetReal(IDF_REAL5,XYZ0(3))    !获取输入的数据XYZ0(3)
                   CALL WDialogGetReal(IDF_REAL6,NALF)       !获取输入的数据NALF
                   CALL WGridRows(IDF_GRID1,NVC+1)                 !根据NVC确定表行数
                   CALL WGridRows(IDF_GRID2,NPC+1)                 !根据NPC确定表行数
                   CALL WGridRows(IDF_GRID3,NJQ)                   !根据NJQ确定表行数
                   CALL WGridRows(IDF_GRID4,NN)                    !根据NJQ确定表行数
      if(ijk.eq.0)then
                    do i=1,NVC
                     CALL WGridGetCellReal(IDF_GRID1,2,i,CHPL(i))  !获取输入的数据CHPL()
                     CALL WGridGetCellReal(IDF_GRID1,3,i,CHPR(i))  !获取输入的数据CHPR()
                    end do
                    do i=1,NVC+1
                     CALL WGridGetCellReal(IDF_GRID1,4,i,CHPI(i))  !获取输入的数据CHPI()
                    end do
                    do i=1,NPC
                     CALL WGridGetCellReal(IDF_GRID2,3,i,PR(i))    !获取输入的数据PR()
                     CALL WGridGetCellReal(IDF_GRID2,4,i,ALF(i))   !获取输入的数据ALF()
                     CALL WGridGetCellReal(IDF_GRID2,5,i,LS(i))    !获取输入的数据LS()
                    end do
                    do i=1,NPC+1
                     CALL WGridGetCellReal(IDF_GRID2,2,i,JD(i))    !获取输入的数据JD()
                    end do
      endif
      if(ijk.eq.1)then
                    do i=1,NJQ
                     CALL WGridGetCellReal(IDF_GRID3,2,i,XXT(i))   !获取输入的数据XXT()
                     CALL WGridGetCellReal(IDF_GRID3,3,i,XDT(i))   !获取输入的数据XDT()
                    end do
      endif
      if(ijk.eq.1)then
                    do i=1,NN
                     CALL WGridGetCellReal(IDF_GRID4,1,i,X(i))     !获取输入的数据X()
                     CALL WGridGetCellReal(IDF_GRID4,2,i,Y(i))     !获取输入的数据Y()
                    end do
      endif
                  QUIT=.FALSE.
                  CASE (IDCANCEL)
              QUIT=.TRUE.
              END SELECT
          END SELECT
          END DO
!****************************************************
      CALL WindowClose()
!
! 打开输出文件以验证读入数据的正确性
!      OPEN(3,FILE='FXX.SCR',STATUS='UNKNOWN')
!
         WRITE(*,555)"AAA"
         WRITE(*,774) NVC,NPC,NJQ,NN                ! 竖曲线个数,平曲线个数
         WRITE(*,772) LSTART,LEND                   ! 起始里程,结束里程,最好涵盖所要的范围;
         WRITE(*,773) XYZ0(1),XYZ0(2),XYZ0(3)       ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
         WRITE(*,666) NALF                          ! 平曲线第一段导线方位角
         WRITE(*,555)"BBB"
       DO I=1,NVC,1
         WRITE(*,772) CHPL(I),CHPR(I)               ! 竖曲线的变坡点里程(NVC)
       end do
         WRITE(*,555)"CCC"
       DO I=1,NVC+1,1
         WRITE(*,666) CHPI(I)                       ! 竖曲线的各段坡度 (NVC+1)
       end do
         WRITE(*,555)"DDD"
       DO J=1,NPC,1
         WRITE(*,773) PR(J),ALF(J),LS(J)           ! 平曲线半径(NPC)
       end do
         WRITE(*,555)"EEE"
       DO J=1,NPC+1,1
         WRITE(*,666) JD(J)                        ! 导线长度累计,与曲线个数对应(NPC)
       end do
         WRITE(*,555)"FFF"
       DO J=1,NJQ,1
         WRITE(*,772) XXT(J),XDT(J)                ! 禁区小里程(NJQ)
       end do
         WRITE(*,555)"GGG"
       DO I=1,NN
         WRITE(*,772) X(I),Y(I)                    ! 地面线点X()
       end do
!
!      CLOSE(3)   ! 关闭文件
!
555    FORMAT(10A)
666    FORMAT(SP,F13.4)
772    FORMAT(SP,2F13.4)
773    FORMAT(SP,3F13.4)
774    FORMAT(SP,4I4)
      STOP
!
      END PROGRAM dushu

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

5#
发表于 2024-12-7 17:45:33 | 只看该作者
本帖最后由 楚香饭 于 2024-12-7 17:52 编辑

37行有一个 Do While(.NOT.QUIT)
无限循环,只有当 QUIT 为 真,退出这个无限循环(消息循环)之后,后面的代码才会被执行。

如果你用了 winteracter 做了图形用户界面,通常需要把命令行的代码修改后,放在某个消息(例如点击某按钮)的处理过程中。

而不是放在退出消息循环之后,因为退出主消息循环,往往意味着图形用户界面就结束了。

如果你是看的本站的教程,那么会建议你新建工程时选择 Windows Application。但这会导致 Console 命令行界面不再出现。
这适合于代码完全采用图形用户界面,没有任何Console输入输出的程序。

但你的程序中,使用了部分图形用户界面,也同时使用了Console的输入输出交互。如果你希望保留Console命令行界面,请创建工程时选择Console工程类型。

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-22 01:09

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表