Без более подробной информации о вашем вводе мы не можем сделать вывод, что это ошибка в gfortran. Вместо этого есть функция программы, которая может привести к «запутанному» поведению.
Для получения ответа программа использует ввод, направленный на списки. Это приводит к неинтуитивным результатам. Например, для человека, пишущего калькулятор , может возникнуть удивление, что происходит, когда кто-то вводит *
или /
.
В примере калькулятора *
участвует в повторении считает и /
в разделителях записей. Для этого вопроса ,
также имеет особое значение. В вводе по списку ,
является разделителем значений, а read *, x
, представленный с этим символом, не устанавливает x
в значение ','
.
Вместо этого оператор ввода
read *, response
при представлении с вводом
,
придет к ,
и увидит «ха, пользователь говорит мне, что не указано никакого значения». Это отличается от пустой строки, в которой обработка ввода продолжает ожидать значения.
Этот разделитель значений соединяется с другой функцией ввода, ориентированного на список: допускаются нулевые значения. Нулевое значение завершает оператор ввода, но оставляет соответствующее значение без изменений (не установлено пустым).
Это означает, что если ввод идет как
1 1
y
1 1
,
Вкл. На втором проходе символ response
равен без изменений от значения 'y'
. Точно так же для
1 1
,
response
не отличается от своего неопределенного статуса: программе не разрешено сравнивать его значение с 'y
'.
Как решить эту проблему? Просто используйте соответствующий формат:
read '(A)', response
Таким образом, ввод ,
обрабатывается как символ, а не как разделитель значений.
Хотя запятые обрабатываются особым образом в Список направленного ввода вопроса, точки с запятой нет. Если вы видите неожиданное поведение с точкой с запятой, это может стать причиной для беспокойства. Я не вижу, чтобы это случилось с доступным мне gfortran.
Однако точки с запятой могут быть особенными. Когда режим десятичного редактирования равен COMMA
(вместо значения по умолчанию POINT
), точка с запятой рассматривается как разделитель значений вместо запятой (которая теперь действует как десятичный разделитель в значениях, таких как 1,23
). COMMA
не является режимом соединения по умолчанию.