如何使用Fortran可分配变量的值?解决赋值维度不匹配错误
Fortran可分配数组赋值错误的解决办法
你遇到的错误是因为array_save(i)是标量(单个整数,秩为0),而idx是一维数组(秩为1),Fortran不允许直接把数组赋值给标量,所以编译器报出"Incompatible ranks 0 and 1"的错误。
根据你的代码逻辑,每次pack操作返回的idx只会包含一个元素(因为array_char_ref和array_char_1的元素是一一对应的),所以只需要取idx的第一个元素赋值给array_save(i)即可,修改后的代码行如下:
array_save(i) = idx(1)
完整的修改后代码:
program use_value_allocatable implicit none integer :: i, ii integer, dimension(3) :: array_save character(1), dimension(3) :: array_char_ref = (/'a','b','c'/), array_char_1 = (/'c','a','b'/) integer, allocatable :: idx(:) array_save = 0 do i = 1, 3 idx = pack([(ii,ii=1,3)], array_char_ref == array_char_1(i) ) print*, 'i=', i, ', idx=', idx, ', array_save(i) =', array_save(i) array_save(i) = idx(1) deallocate(idx) end do end program use_value_allocatable
这样修改后,就能把idx中的唯一值正确存入array_save的对应位置了。
内容的提问来源于stack exchange,提问作者user790082
相关产品推荐
相关产品推荐

