对于要转换为int的字符串,字符大小应为FORTRAN

时间:2018-06-22 02:45:17

标签: fortran

下面的程序在运行时出错

    program exmple
    implicit none
    character(len=10)::FT

    write(FT,*)int(0.75*100)

    end

这给出了错误

  

输出语句溢出记录,单位-5,文件内部列表定向写

为了消除错误,我需要len = 12或更大。我的问题就是为什么?什么决定了int字符串所需的长度?

如果有用,我将使用ifort v 14.0.2进行编译

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。