2015-05-28 4 views
1

Когда я объявляю строку типа:Почему не FORtran перебирать струны

character(19) :: line 
do I = 1, 19, 1 
if (line(I) == 'n') 

компилятор говорит мне об ошибке. Как это исправить? Когда я заявляю, как это:

character line(19) 

У меня нет никаких проблем с -Если, но тогда я должен нажать клавишу ВВОД после каждого символа, я хочу, чтобы положить в моей строке.

+1

Какой erreor? Вы всегда должны включать сообщения об ошибках в свои вопросы. –

+0

Да. Два ответа смотрели на ссылку подстроки, но и инструкция 'if'/construct также нарушена. Один из них также адресован. Это зависит от того, что вы имеете в виду. – francescalus

ответ

4

У вас есть две совершенно разные вещи.

character(19) line 

объявляет скалярные переменные символы длины 19, тогда как

character line(19) 

объявляет ранг-1 массив размера 19 символьных переменной длиной 1.

line(i) синтаксис для ссылки элемент i массива line. Это справедливо только тогда, когда line - это массив (ваш второй, рабочий, случай). Как видно из Fortran 2008 6.4.1, подстрока, даже длина одной, ссылается с использованием другого синтаксиса. В вашем случае line(i:i).

Для массива

character(19) lines(2) 

мы можем иметь доступ как lines(1)(1:1) тогда lines(1) будет длина-19 первый элемент массива.

1
character(10) :: line 
do i =1, 10 
if(line(i:i) == 'n') then 
... 
Смежные вопросы