[ОТ РЕДАКЦИИ: я прочитал этот вопрос, но ( в то время как в ретроспективе это в конечном счете связано таким же образом, как и каждый вопрос здесь, например, «Почему компьютеры работают со сбоями?»), этот ответ не является ответом на мой вопрос. Этот вопрос спрашивает, почему орган по стандартизации разработал определенную функцию в языке. И ответ не отвечает на мой вопрос, который спрашивает, что я пропустил при отладке этой проблемы.]
ВОПРОС: Почему выходные данные этой программы на Фортране (ExhaustiveListing.f08 + unicodeSupport.f08), показанные ниже, указывают на то, что DO WHILE в Fortran ошибка?
Вот вывод, за которым следует описание среды и, наконец, исходный код двух рассматриваемых файлов:
НЕОЖИДАННЫЙ РЕЗУЛЬТАТ
Hex теперь: 2500H.
2500─
2501━
2502│
2503┃
2504┄
2505┅
2506┆
> 2507┇
2508┈
2509┉
250A┊
250B┋
250C┌
250D┍
250E┎
250F┏
Hex теперь: 2510H.
Теперь шестнадцатеричное значение: 2520H.
Теперь шестнадцатеричное значение: 2530H.
Теперь шестнадцатеричное значение: >2540H.
Теперь шестнадцатеричное значение: 2550H.
Теперь шестнадцатеричное значение: 2560H.
Теперь шестнадцатеричное значение: 2570H .
ЗАПУСК ЗАВЕРШЕН; выходное значение 0; реальное время: 530 мс; пользователь: 0 мс; система: 0 мс
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ
Я ожидал, что между каждой строкой «Hex is now: xxxxH» должно быть 16 строк детализации, например, между 2500H и 2510H строк.
ПРЕДЫДУЩИЕ ПОПЫТКИ РЕШЕНИЯ ПРОБЛЕМЫ
Эта программа — моя попытка решить проблему в гораздо более крупном проекте. Имея проблемы с этим проектом (одна из таких проблем связана с работой с Unicode в Fortran), я создал этот проект, чтобы изолировать проблему с Unicode. Сначала у меня был тривиальный модуль unicodeSupport, объединенный в одном файле с основной программой. Я удалил его в свой собственный файл. Нет, это не должно иметь значения и -- это не повлияло на результат. Эта программа настолько проста, что я не вижу ничего, что могло бы быть сделано неправильно. Следовательно, я пришел в SO в надежде, что новые глаза обнаружат мою ошибку. В противном случае пришло время отправить отчет об ошибке в gFortran.
ОКРУЖАЮЩАЯ ОБСТАНОВКА
Среда, в которой я работаю:
ОС: Ubuntu 17.10 IDE: Netbeans 8.2 < strong>JDK: Oracle (сборка 1.8.0_161-b12) КОМПИЛЬЕР: gFortran 7.2.0 ФЛАГИ КОМПИЛЯТОРА< /strong>: -std=f2008ts -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans theGeeko61: 4 десятилетия разработки на BASIC, Pascal , FORTRAN, C, Prolog, C++, Java и многие другие (отсортированы в хронологическом порядке, в котором я их изучал)
Исчерпывающий список.f08
! File: ExhaustiveListing.f08
! Author: geeko
!
! Created on March 25, 2018, 7:05 PM
!
! ☐ U2610 ☑ U2611 ☒ U2612
! Use above symbols for indicating items to
! be tested (☐), and items which have either
! passed (☑) or failed (☒) testing.
!
SUBROUTINE displayLine(hex)
USE unicodeSupport
IMPLICIT NONE
INTEGER :: hex, counter=0, point
DO WHILE (counter < 16)
point = hex+counter
WRITE(*,'(Z4.4,A)') point, CHAR(INT(point), ucs4)
counter = counter+1
END DO
END SUBROUTINE
PROGRAM ExhaustiveListingOfUnicodeBoxDrawingChars ! ☒
USE ISO_FORTRAN_ENV
USE unicodeSupport
!!!!!USE testUnicodeSupport ! ☑
IMPLICIT NONE
INTEGER :: hex
open(output_unit, encoding='UTF-8')
hex = 9472
DO WHILE(hex<9600)
PRINT '(A,Z4.4,A)', "Hex is now: ", hex, "H."
CALL displayLine(hex) ! ☒
hex = hex+16
END DO
!!!!CALL performTest() ! ☑
END PROGRAM ExhaustiveListingOfUnicodeBoxDrawingChars
unicodeSupport.f08
! File: unicodeSupport.f08
! Author: geeko
!
! Created on March 25, 2018, 10:09 PM
!
MODULE unicodeSupport
INTEGER, PARAMETER :: ASCII = SELECTED_CHAR_KIND('ASCII')
INTEGER, PARAMETER :: UCS4 = SELECTED_CHAR_KIND('ISO_10646')
END MODULE unicodeSupport