2012-04-03 9 views
5

Tôi chỉ muốn sửa đổi một phần nhỏ của một chương trình rất cũ và tôi không thể cho cuộc sống của tôi tìm ra những gì tôi đã làm để tức giận các vị thần Fortran.Lỗi cú pháp, tìm thấy .và. và .or.

Mã ban đầu có dòng sau:

if (r.gt.rstep) xappad = xappad*fakm 

mà tôi đã sửa đổi để:

if (r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep 
: .and. r.lt.2.92*rstep) xappad = xappad*fakm 

nào mang lại cho tôi những lỗi:

sp-co-2- MODIFIED.for (785): lỗi # 5082: Lỗi cú pháp, được tìm thấy '.OR'. khi chờ đợi một trong số: BLOCK BLOCKDATA CHƯƠNG TRÌNH PHẦN LOẠI COMPLEX BYTE CHARACTER DOUBLE DOUBLECOMPLEX ...

 if (r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep 
-------------------------------------------------------------------------^ 

sp-co-2-MODIFIED.for (786): lỗi # 6090: Một mảng có giá trị toán hạng được yêu cầu trong ngữ cảnh này.

 : .and. r.lt.2.92*rstep) xappad = xappad*fakm 
------^ 

sp-co-2-MODIFIED.for (786): lỗi # 6087: Một câu lệnh gán mảng là cần thiết trong bối cảnh này.

 : .and. r.lt.2.92*rstep) xappad = xappad*fakm 
-------------------------------------------^ 
+4

Tôi đã không được mã hóa trong FORTRAN cho gần 25 năm, nhưng nếu tôi nhớ lại chính xác, bạn cần một cặp dấu ngoặc đơn xung quanh toàn bộ biểu thức có điều kiện. – dasblinkenlight

Trả lời

15

Tôi thực sự không biết nhiều FORTRAN, nhưng có vẻ với tôi như bạn đang bỏ lỡ một cặp ngoặc xung quanh có điều kiện:

if ((r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep .and. r.lt.2.92*rstep)) xappad = xappad*fakm 
+0

AH, tôi biết tôi đã là một tên ngốc lớn. Điều đó dường như đã làm điều đó, cảm ơn bạn. –