在Fortran中写入空白而不是整数

在Fortran中写入空白而不是整数,fortran,integer,character,Fortran,Integer,Character,我有一些110元素向量。它们有时具有从0到9的值,但其默认值为-1。如果单元格的值为-1,我想打印一个空白;否则打印它们的值 我在一个输出行中打印了几件东西,因此我不能将if与两个writes一起使用。将值传递给字符向量很有效,但我忍不住认为一定有更好的方法 我的尝试: program integer_print_blank_test implicit none integer, dimension(9) :: longint character(len=3), dimens

我有一些110元素向量。它们有时具有从
0
9
的值,但其默认值为
-1
。如果单元格的值为
-1
,我想打印一个空白;否则打印它们的值

我在一个输出行中打印了几件东西,因此我不能将
if
与两个
write
s一起使用。将值传递给
字符
向量很有效,但我忍不住认为一定有更好的方法

我的尝试:

program integer_print_blank_test
implicit none

integer, dimension(9)          :: longint
character(len=3), dimension(9) :: longchar
integer                        :: i, j

do i = 0, 2
write(*,*) (longint(3*i+j), j = 1, 3)
end do

longint = -1

longint(1) = 1
longint(4) = 3
longint(9) = 7

write(*,*) "longint"
do i = 0, 2
write(*,*) (longint(3*i+j), j = 1, 3)
end do

do i = 1, 9
write(longchar(i),"(I3)") longint(i)
end do

write(*,*) "longchar"
do i = 0, 2
write(*,*) (longchar(3*i+j), j = 1, 3)
end do

write(*,*) "only positives in longchar"
longchar = " "

do i = 1, 9
  if (longint(i) > -1) then
    write(longchar(i),"(I3)") longint(i)
  end if
end do

do i = 0, 2
write(*,*) (longchar(3*i+j), j = 1, 3)
end do

end program integer_print_blank_test

你可能认为这是一个更好的方法。定义一个函数,例如

  ELEMENTAL FUNCTION borf(int) RESULT(str)
    INTEGER, INTENT(in) :: int
    CHARACTER(len=2) :: str
    str = '  '
    IF (int>-1) WRITE(str,'(i2)') int
  END FUNCTION borf
像这样使用它

  WRITE(*,*) borf(longint)

你可能认为这是一个更好的方法。定义一个函数,例如

  ELEMENTAL FUNCTION borf(int) RESULT(str)
    INTEGER, INTENT(in) :: int
    CHARACTER(len=2) :: str
    str = '  '
    IF (int>-1) WRITE(str,'(i2)') int
  END FUNCTION borf
像这样使用它

  WRITE(*,*) borf(longint)

如何声明函数?什么意思?如何声明函数?你把我写的东西复制到你的源文件中(当然是在正确的地方),然后编译好。如果你不知道怎么做,你可能应该问另一个问题,这不是我可以在评论中教你的。我该如何声明函数?你是什么意思?我该如何声明函数?你把我写的东西复制到你的源文件中(当然是在正确的地方),然后编译好。如果你不知道怎么做,你可能应该问另一个问题,这不是我可以在评论中教你的。