Fortran Coder

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

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

[复制链接]

8

帖子

1

主题

0

精华

入门

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

740

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
716 元
贡献
367 点

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

沙发
发表于 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] 纯文本查看 复制代码
001       Module Global
002         Use Winteracter      !// 使用 Winteracter
003         Use Resid            !// 使用 Resid 资源ID
004         Implicit None
005       End Module Global
006!
007       PROGRAM dushu
008       Use Global
009       Implicit None
010! 参数定义
011       TYPE(WIN_MESSAGE)  :: MESSAGE
012       LOGICAL :: QUIT=.FALSE.
013       INTEGER :: ITYPE,I,J,ijk
014! 需要通过界面对话框读入下面的数据
015       INTEGER :: NVC,NPC,NJQ,NN              ! 竖曲线个数,平曲线个数,禁区个数
016       REAL :: LSTART,LEND                    ! 起始里程,结束里程,最好涵盖所要的范围;
017       REAL :: CHPL(105)                      ! 竖曲线的变坡点里程(NVC)
018       REAL :: CHPR(105)                      ! 竖曲线的变坡点半径(NVC)
019       REAL :: CHPI(106)                      ! 竖曲线的各段坡度 (NVC+1)
020       REAL :: XYZ0(3)                        ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
021       REAL :: NALF                           ! 平曲线第一段导线方位角
022       REAL :: JD(51)                         ! 导线长度累计,与曲线个数对应(NPC+1)
023       REAL :: PR(50)                         ! 平曲线半径(NPC)
024       REAL :: ALF(50)                        ! 导线相对前一导线的偏角,逆时针为正(NPC)
025       REAL :: LS(50)                         ! 平曲线的缓和曲线长(NPC)
026       REAL :: XXT(66),XDT(66)                ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
027       REAL :: X(40000),Y(40000)              ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
028!
029        CALL WInitialise()                    ! 初始化窗口
030        CALL WindowOpen(HideWindow)           ! 此演示不需要根窗口,因此要隐藏它
031!  开始窗口程序(用于替代原输入数据部分)              
032        CALL WDialogLoad(IDD_DIALOG001)
033        CALL WDialogShow(itype=Modeless)
034!
035        ijk=0
036!****************************************************
037           DO WHILE(.NOT.QUIT)  
038           CALL WMessage(ITYPE,MESSAGE)        
039              SELECT CASE (ITYPE)
040              CASE (PushButton)
041                  SELECT CASE (MESSAGE%VALUE1)
042                  CASE (IDOK)                  
043                   CALL WDialogGetInteger(IDF_INTEGER1,NVC)  !获取输入的数据NVC
044                   CALL WDialogGetInteger(IDF_INTEGER2,NPC)  !获取输入的数据NPC
045                   CALL WDialogGetInteger(IDF_INTEGER3,NJQ)  !获取输入的数据NJQ
046                   CALL WDialogGetInteger(IDF_INTEGER4,NN)   !获取输入的数据NJQ
047                   CALL WDialogGetReal(IDF_REAL1,LSTART)     !获取输入的数据LSTART
048                   CALL WDialogGetReal(IDF_REAL2,LEND)       !获取输入的数据LEND
049                   CALL WDialogGetReal(IDF_REAL3,XYZ0(1))    !获取输入的数据XYZ0(1)
050                   CALL WDialogGetReal(IDF_REAL4,XYZ0(2))    !获取输入的数据XYZ0(2)
051                   CALL WDialogGetReal(IDF_REAL5,XYZ0(3))    !获取输入的数据XYZ0(3)
052                   CALL WDialogGetReal(IDF_REAL6,NALF)       !获取输入的数据NALF
053                   CALL WGridRows(IDF_GRID1,NVC+1)                 !根据NVC确定表行数
054                   CALL WGridRows(IDF_GRID2,NPC+1)                 !根据NPC确定表行数
055                   CALL WGridRows(IDF_GRID3,NJQ)                   !根据NJQ确定表行数
056                   CALL WGridRows(IDF_GRID4,NN)                    !根据NJQ确定表行数
057      if(ijk.eq.0)then
058                    do i=1,NVC
059                     CALL WGridGetCellReal(IDF_GRID1,2,i,CHPL(i))  !获取输入的数据CHPL()
060                     CALL WGridGetCellReal(IDF_GRID1,3,i,CHPR(i))  !获取输入的数据CHPR()
061                    end do
062                    do i=1,NVC+1
063                     CALL WGridGetCellReal(IDF_GRID1,4,i,CHPI(i))  !获取输入的数据CHPI()
064                    end do
065                    do i=1,NPC
066                     CALL WGridGetCellReal(IDF_GRID2,3,i,PR(i))    !获取输入的数据PR()
067                     CALL WGridGetCellReal(IDF_GRID2,4,i,ALF(i))   !获取输入的数据ALF()
068                     CALL WGridGetCellReal(IDF_GRID2,5,i,LS(i))    !获取输入的数据LS()
069                    end do
070                    do i=1,NPC+1
071                     CALL WGridGetCellReal(IDF_GRID2,2,i,JD(i))    !获取输入的数据JD()
072                    end do
073      endif
074      if(ijk.eq.1)then
075                    do i=1,NJQ
076                     CALL WGridGetCellReal(IDF_GRID3,2,i,XXT(i))   !获取输入的数据XXT()
077                     CALL WGridGetCellReal(IDF_GRID3,3,i,XDT(i))   !获取输入的数据XDT()
078                    end do
079      endif
080      if(ijk.eq.1)then
081                    do i=1,NN
082                     CALL WGridGetCellReal(IDF_GRID4,1,i,X(i))     !获取输入的数据X()
083                     CALL WGridGetCellReal(IDF_GRID4,2,i,Y(i))     !获取输入的数据Y()
084                    end do
085      endif
086                  QUIT=.FALSE.
087                  CASE (IDCANCEL)
088              QUIT=.TRUE.
089              END SELECT
090          END SELECT
091          END DO
092!****************************************************
093      CALL WindowClose()
094!
095! 打开输出文件以验证读入数据的正确性
096!      OPEN(3,FILE='FXX.SCR',STATUS='UNKNOWN')
097!
098         WRITE(*,555)"AAA"
099         WRITE(*,774) NVC,NPC,NJQ,NN                ! 竖曲线个数,平曲线个数
100         WRITE(*,772) LSTART,LEND                   ! 起始里程,结束里程,最好涵盖所要的范围;
101         WRITE(*,773) XYZ0(1),XYZ0(2),XYZ0(3)       ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
102         WRITE(*,666) NALF                          ! 平曲线第一段导线方位角
103         WRITE(*,555)"BBB"
104       DO I=1,NVC,1
105         WRITE(*,772) CHPL(I),CHPR(I)               ! 竖曲线的变坡点里程(NVC)
106       end do
107         WRITE(*,555)"CCC"
108       DO I=1,NVC+1,1
109         WRITE(*,666) CHPI(I)                       ! 竖曲线的各段坡度 (NVC+1)
110       end do
111         WRITE(*,555)"DDD"
112       DO J=1,NPC,1
113         WRITE(*,773) PR(J),ALF(J),LS(J)           ! 平曲线半径(NPC)
114       end do
115         WRITE(*,555)"EEE"
116       DO J=1,NPC+1,1
117         WRITE(*,666) JD(J)                        ! 导线长度累计,与曲线个数对应(NPC)
118       end do
119         WRITE(*,555)"FFF"
120       DO J=1,NJQ,1
121         WRITE(*,772) XXT(J),XDT(J)                ! 禁区小里程(NJQ)
122       end do
123         WRITE(*,555)"GGG"
124       DO I=1,NN
125         WRITE(*,772) X(I),Y(I)                    ! 地面线点X()
126       end do
127!
128!      CLOSE(3)   ! 关闭文件
129!
130555    FORMAT(10A)
131666    FORMAT(SP,F13.4)
132772    FORMAT(SP,2F13.4)
133773    FORMAT(SP,3F13.4)
134774    FORMAT(SP,4I4)
135      STOP
136!
137      END PROGRAM dushu

740

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
716 元
贡献
367 点

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

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, 2025-1-10 22:31

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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