Fortran控制台读取:如何检测仅回车无输入的情况
解决Fortran中检测回车空输入的问题
原来的列表导向read(*,*)会自动跳过空白字符,所以直接按回车时,程序会一直等待有效输入,没法捕获空行。要实现检测直接回车的需求,得换用格式化读入来读取整行内容:
修改方案
- 把读取语句改成带字符格式的读入,用
'(a)'格式符,这样会读取整行输入(包括空行),而不是跳过空白等待非空输入。 - 用
trim()函数处理可能的前导/尾随空格,确保只判断真正的空输入。 - 同时利用
iostat参数处理输入错误或EOF的情况。
修改后的代码示例
flist = 0.0 write (*, 778) 778 format ('Enter temperature to save frequencies to frq.dat or press Enter to bypass ', $) read(*,'(a)', iostat = rerr) fstring ! 处理输入错误或EOF if (rerr /= 0) then ! 可添加错误处理逻辑,比如退出或重置输入 goto 999 endif ! 判断是否为空输入(直接回车) if (trim(fstring) /= '') then ! 输入温度后的处理逻辑 .... else ! 用户直接按回车,执行跳过逻辑 .... endif 999 continue
关键说明
'(a)'格式会读取整行输入,包括所有空格和空行,直接回车时fstring会被赋值为空字符串。trim(fstring)是为了排除用户输入空格再回车的情况,如果允许空格也视为跳过,可去掉trim()直接判断fstring == ''。iostat参数用来捕获输入错误(比如用户按下Ctrl+D触发EOF),避免程序异常崩溃。
内容的提问来源于stack exchange,提问作者ultrasound
相关产品推荐
相关产品推荐

