Чтение строки с пробелами в Фортране - PullRequest
10 голосов
/ 12 июня 2011

Использование чтения (звездочка, звездочка) в Фортране, похоже, не работает, если строка, читаемая пользователем, содержит пробелы. Рассмотрим следующий код:

    character(Len = 1000) :: input = ' '
    read(*,*) input

Если пользователь вводит строку «Здравствуйте, меня зовут Джон Доу», только «Hello» будет храниться на входе; все после пробела игнорируется. Я предполагаю, что компилятор предполагает, что «Hello» является первым аргументом, а «my» - вторым, поэтому для захвата других слов мы должны использовать что-то вроде read (, ) input1, input2, input3 ... и т. д. Проблема этого подхода заключается в том, что нам нужно было бы создавать большие символьные массивы для каждого ввода и точно знать, сколько слов будет введено. Есть ли способ обойти это ?? Какая-нибудь функция, которая на самом деле будет читать все предложение, пробелы и все? Большое спасибо!

Ответы [ 2 ]

23 голосов
/ 12 июня 2011
  character(100) :: line

  write(*,'("Enter some text: ",\)')
  read(*,'(A)') line
  write(*,'(A)') line

  end

... прочитает строку текста максимальной длины 100 (достаточно для большинства практических целей) и запишет ее вам.Изменить по своему вкусу.

9 голосов
/ 12 июня 2011

Вместо read(*, *), попробуйте read(*, '(a)').Я не эксперт по Фортрану, но вторым аргументом read является спецификатор формата (эквивалентный второму аргументу sscanf в C).* там означает формат списка, который вам не нужен.Вы также можете сказать a14, если хотите прочитать 14 символов в виде строки, например.

...