我正在尝试编译一些Fortran代码,我收到以下错误,
WRITE(1,FMT='(A,I)') ' ncoefs= ',NFOUR
1
Error: Nonnegative width required in format string at (1)
和
WRITE(1,FMT='(A,100(F4.1,","))') ' spabnd= ',(SPABND(I),I=1,NLYR+1
1
Error: Expected a right parenthesis in expression at (1)
关于第二个错误的奇怪之处在于,在实际代码中,我在此表达式的末尾有一个括号,即(SPABND(I),I=1,NLYR+1)
就是它的样子。
答案 0 :(得分:3)
第一个是自我解释,使用I0
或一些正数来设置字段宽度。这是将用于写入变量的字符数。宽度0
表示将使用拟合值所需的最小数量。可以保留A
描述符。在Fortran 2008 g0
也有效。
在另一种情况下,您似乎超过了最大行长度。固定格式为72
个字符,自由格式为132
个字符。尝试分割线并根据源格式使用正确的线延续。
答案 1 :(得分:1)
第二个代码片段可以更简洁地编写为
WRITE(1,FMT='(A,100(F4.1,","))') ' spabnd= ',SPABND(1:NLYR+1)
或
WRITE(1,FMT='(A,100(F4.1,","))') ' spabnd= ',SPABND(:NLYR+1)
如果下限或数组SPABND为1,则通常是Fortran中的情况。正如Vladimir F写的那样,代码的问题可能与行长度有关,但使用更简洁的习语是避免此类错误的一种方法。