Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Unicode 为什么每次子例程调用时计数器变量都会意外增加?_Unicode_Fortran_Do While_Gfortran - Fatal编程技术网

Unicode 为什么每次子例程调用时计数器变量都会意外增加?

Unicode 为什么每次子例程调用时计数器变量都会意外增加?,unicode,fortran,do-while,gfortran,Unicode,Fortran,Do While,Gfortran,[社论:我读过,但(事后看来,它最终与这里的每一个问题都是相关的,即“为什么计算机会出现故障?”)这个答案并不是对我问题的回答。这个问题是问为什么一个标准机构会在语言中设计一个特定的特性。而且,这个答案并没有回答我的问题,我的问题是问我在调试这个问题时遗漏了什么。] 问题:为什么下面显示的这个Fortran程序(ExtreaseVelisting.f08+unicodeSupport.f08)的输出表明Fortran的DO-WHILE有一个主要错误 下面是输出,后面是环境描述,最后是两个文件的源

[社论:我读过,但(事后看来,它最终与这里的每一个问题都是相关的,即“为什么计算机会出现故障?”)这个答案并不是对我问题的回答。这个问题是问为什么一个标准机构会在语言中设计一个特定的特性。而且,这个答案并没有回答我的问题,我的问题是问我在调试这个问题时遗漏了什么。]


问题:为什么下面显示的这个Fortran程序(ExtreaseVelisting.f08+unicodeSupport.f08)的输出表明Fortran的DO-WHILE有一个主要错误

下面是输出,后面是环境描述,最后是两个文件的源代码:

意外输出 十六进制现在为:2500H
2500─
2501━
2502│
2503┃
2504┄
2505┅
2506┆
2507┇
2508┈
2509┉
250A┊
250B┋
250摄氏度┌
250D┍
250E┎
250F┏
十六进制现在是:2510H
十六进制现在是:2520H
十六进制现在是:2530H
十六进制现在为:2540H
十六进制现在是:2550H
十六进制现在是:2560H
十六进制现在是:2570H

跑完;退出值为0;实时:530ms;用户:0毫秒;系统:0毫秒

预期产量 我希望每个“十六进制现在是:xxxxH”行之间有16行细节,例如打印在2500H2510H行之间的细节

以前解决此问题的尝试 这个项目是我在一个更大的项目中试图解决的一个问题。由于该项目存在问题(其中一个问题是在Fortran中使用Unicode),我创建了这个项目来隔离Unicode问题。起初,我将微不足道的unicodeSupport模块与主程序合并在同一个文件中。我将其删除到自己的文件中。不,这不重要,也不影响结果。这个程序非常简单,我看不到任何可能出错的地方。因此,我来到SO,希望新的眼睛发现我的错误。否则,是时候向gFortran提交错误报告了

环境 我工作的环境是:
操作系统:Ubuntu 17.10 IDE:Netbeans 8.2 JDK:Oracle(版本1.8.0_161-b12) 编译器:gFortran 7.2.0 编译器标志:-std=f2008ts-fno不安全的数学优化-FRONING math-fsignaling NAN <强> > Geeo61 61:强:在BASIC,Pascal,FORTRAN,C,PROlog,C++,java等4个基础上发展(按我学习顺序顺序排序) Extravelisting.f08
此处声明的变量
计数器

INTEGER :: hex, counter=0, point
通过在初始化行上定义其值,具有
save
属性

第二次输入子例程时,其值将为16,因此不会出现循环

从声明行中删除
=0
,然后写入

counter = 0

之后。

以后,如果您认为您在Fortran中发现了一个“主要错误”,请尽可能少地创建一个示例来说明同样的问题。@francescalus:这就是我试图做的。。。“最小”过于主观。。。这是我的最小。。你的眼睛会是什么样子?;)(在Fortran中,一个只有一个文件的项目是最小的,不是吗?)。“为什么这个Fortran程序的输出……如下所示表明Fortran的DO-WHILE有一个主要的bug?”不用担心。我同意“初始化意味着保存”并不是这些问题的一个直观来源(如果这真的是一个糟糕的问题,我会投反对票,不会回头看).不过,将困难的案例剥离到最低限度是一项非常有价值的技能。你的视野非常好。我很高兴这是我的错误。我讨厌提交错误报告。:)
INTEGER :: hex, counter=0, point
counter = 0