将不正确的值读入变量的尝试是否会改变其值?
问题描述:
如果存在iostat
关键字,则发生I/O错误时程序不会停止。然后,如果我尝试将不正确的值读入标量变量,那么i
会说这个变量保持不变吗?以下似乎工作:将不正确的值读入变量的尝试是否会改变其值?
program test
integer :: i, stat
i = 1
do
write (*, "('i = ')", advance='no')
read (*, *, iostat=stat) i
if (stat .eq. 0) then
write (*, "('Valid integer. i has been set to ', I0)") i
else
write (*, "('Bad integer. i is still ', I0)") i
end if
end do
end program test
我可以在Fortran 2003中依赖此行为吗?
答
不,不成功读取后变量的值是未定义的。
的Fortran 2008,9.11.2
如果 执行包含任一种ERR = 说明符或IOSTAT =说明然后一个输入/输出语句的过程中发生错误条件:
。 ...
如果语句是READ语句或错误条件发生在 由READ语句启动的传输的等待操作,所有 输入项或名称在发起 转移的语句中st组对象变为undefined;
仅仅是因为某个编译器(在我的情况gfortran)上述代码的行为,而不是因为标准(我找不到任何东西)的行为? – 2015-02-11 11:15:06
是的,但即使使用相同的编译器,在另一种情况下也可能会失败。阅读F2008标准中的全部9.11节。 – 2015-02-11 11:15:43
现在我也在Fortran 2003,9.10.1中找到了这个。谢谢! – 2015-02-11 11:28:54