普通格式化输出完成后会结束当前记录,终端中通常表现为换行。write的advance="no"说明符可以暂不结束记录,让后续输出继续写在同一行。
语法结构
write (unit, format, advance="no") output_list
- advance="no"只适用于显式格式的外部格式化输入输出。
- 连续的非前进write会继续使用当前输出记录。
- 完成同一行输出后,应执行一次普通write来结束记录。
本文代码
! advance='no'让多次write继续写入同一条记录。
program nonAdvancingOutputDemo
implicit none
integer :: percent
write (*,"(A)",advance="no") "进度:"
do percent = 0, 100, 50
write (*,"(1X,I0,A)",advance="no") percent, "%"
end do
write (*,*)
end program nonAdvancingOutputDemo
编译运行
(base) hong@hongdeMacBook-Pro 039.nonAdvancingOutput % gfortran -Wall -Wextra -std=f2018 exampleNonAdvancingOutput.f90
(base) hong@hongdeMacBook-Pro 039.nonAdvancingOutput % ./a.out
进度: 0% 50% 100%
现象分析
标题和三个百分比由四次非前进write产生,但它们共同出现在一行。循环结束后的空write (*,*)结束当前记录,使后续终端内容从下一行开始。
核心知识点
- advance="no"控制是否结束输出记录,不会改变格式描述符本身。
- 非前进输出适合提示符、进度信息和需要分步生成的单行内容。
- print没有advance说明符,这是write控制列表提供的能力。