-2

我有一个包含 2 列的数据文件。假设:
第 1 列(8,8,8,6,9),将其读取为a.
第 2 列(3,4,5,6,7),读作b.
我想写一个代码检查 if a(i)=a(i+1)then b=0

所以结果应该是第 1 列a(8,8,8,6,7),第 2 列b应该是(0,0,0,6,7)

我试过这个但失败了:

program read2cols
  implicit none

  integer ::ios,i,j
  real a,b
  open(file='8081.txt', unit=22, status='old', action='read')

do 
   read(22,*,iostat=ios) a(i),b(j)
   if(a(i)<a(i))b=0 

       if(ios/=0) exit 
     print*,a,b 
 enddo
  close(22)


end program read2cols
4

1 回答 1

0

你的程序可以是这样的:

program read2cols
  implicit none

  integer :: ios, i, j
  real :: a(5), b(5)
  open(file='8081.txt', unit=22, status='old', action='read')

  read(22, *, iostat = ios) a(1), b(1)
  do i = 2,5
    read(22, *, iostat = ios) a(i), b(i)
    if (ios /= 0) exit
    if (a(i-1) == a(i)) b(i-1) = 0
  end do

  print *, a, b
  close(22)

end program read2cols

输出:

   8.00000000       8.00000000       8.00000000       6.00000000       9.00000000       
   0.00000000       0.00000000       5.00000000       6.00000000       7.00000000

笔记:

您将aand声明b为标量,然后使用 对它们进行索引i,通过声明a(5), b(5)为数组来解决此问题。中缺少循环索引do ..,它应该是do i = ... 最后,条件应该是if (a(i-1) == a(i)) b(i-1) = 0因为你只能在读取后才能比较一个值。

于 2018-12-04T15:21:56.083 回答