Как я могу узнать длину пользовательского ввода с конечными пробелами в Фортране? - PullRequest
0 голосов
/ 04 июня 2018

Я хочу знать длину одной строки пользовательского ввода в Фортране.Поскольку этот вход может содержать несколько пробельных пробелов, LEN_TRIM не дает правильного ответа.

program test

implicit none
character(len=100) :: s

read(*, '(a)') s
write(*, '(i0)') len_trim(s)

end program test

пример входов и выходов:

вход: Hello World!

выход:12

ожидаемый вывод: 15

ввод: (5 пробелов)

вывод: 0

ожидаемый вывод: 5

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Считайте введенные по одному символу за раз и посчитайте число, прочитанное с STDIN.

program foo
  character(len=100) s
  integer i
  i = 1
  do
      read(*,'(A1)',eor=10,advance='no') s(i:i)
      i = i + 1
  end do
10 print *, i - 1  ! Minus for '\n'
end program foo

TRIM и LEN_TRIM все равно избавят от конечных пробелов.Вы можете проверить это s(i:i) == ' ', а затем установить для него какой-нибудь печатный символ.

0 голосов
/ 04 июня 2018

Так что, если я понимаю ваш вопрос, вы хотели бы включить в свой запрос любые конечные пробелы, которые пользователь включил в свой ввод.

Это просто невозможно в формате ввода-вывода в формате Fortran изстандартный ввод (с клавиатуры) - я НЕПРАВИЛЬНО вижу ответ @evets - это верно только (я думаю сейчас) для опережающего вывода полных строк.Невозможно отличить конечный пробел, включенный пользователем, и обычно используемые пробелы также дополняют все строки Фортрана.

Поэтому, когда len_trim() считает длину строки, он обрезает все завершающие пробелы, включая введенныепользователем.То же самое относится и к функции trim().

...