下面的程序在运行时出错
program exmple
implicit none
character(len=10)::FT
write(FT,*)int(0.75*100)
end
这给出了错误
输出语句溢出记录,单位-5,文件内部列表定向写
为了消除错误,我需要len = 12或更大。我的问题就是为什么?什么决定了int字符串所需的长度?
如果有用,我将使用ifort v 14.0.2进行编译
答案 0 :(得分:3)
在未指定格式的情况下,根据10.10.4节(基于列表的输出),Fortran 2008标准的注释10.33
未指定输出记录的长度,并且取决于处理器。
这涉及外部和内部文件。
在以下情况下,我建议在将整数写入字符串时使用'(i0)'
作为格式:根据标准,第10.7.2.1节第1(5)段,
在输出中,通过编辑I,B,O,Z,F和G,字段宽度 w 的指定值可能为零。在这种情况下,处理器会选择最小的实际正字段宽度,该宽度不会导致字段中充满星号。
答案 1 :(得分:1)
什么决定一个int字符串所需的长度?
如果未指定格式,则它取决于编译器。要了解您的特定编译器,只需执行打印并检查输出(在我的ifort 18中也是12)。
无论如何,您不应该指望这种行为,因为它根本无法移植。如果可能,请使用格式化的输出。
编辑:仅提示编译器如何选择无格式整数的长度。默认整数(通常为4个字节)可以表示的最大整数是<table class="table">
<tr class="header" id="myHeader">
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
<tr>
<td>
someName
</td>
<td>
someAge
</td>
</tr>
</table>
,这是10位数字。再为一个可能的负单数添加一个字符,并用一个空格将其与以前的记录分开,得到12。