COBOL程序条件判断故障:输入任意值均触发同一分支
故障原因与修复方案
核心问题
你的程序中SHOW-RESULT段的IF语句存在语法逻辑错误:
IF USER-ANSWER = "Y" OR "y"
COBOL的逻辑表达式要求OR连接的两个分支必须是完整的比较条件。上面的写法会被编译器解析为:
(USER-ANSWER = "Y") OR ("y")
在COBOL中,非空字符串会被当作逻辑真(TRUE),所以"y"永远为真,导致整个IF条件始终成立,无论USER-ANSWER是什么值,都会执行第一个分支的输出。
修复代码
将IF语句修改为完整的双条件判断即可解决问题:
SHOW-RESULT. DISPLAY "Here's your random string:" DISPLAY MY-RANDOM-STRING (1:STRING-LENGTH) DISPLAY "It's " STRING-LENGTH " characters long." DISPLAY "Good enough? (Y/N)" ACCEPT USER-ANSWER IF USER-ANSWER = "Y" OR USER-ANSWER = "y" DISPLAY "Cool, glad you like it!" ELSE DISPLAY "Aw, too bad. Maybe try running it again?" END-IF.
可选优化
如果需要处理用户输入时不小心带入空格的情况,可以在判断前先对输入做统一处理,让逻辑更健壮:
ACCEPT USER-ANSWER COMPUTE USER-ANSWER = FUNCTION UPPER( FUNCTION TRIM(USER-ANSWER) ) IF USER-ANSWER = "Y" DISPLAY "Cool, glad you like it!" ELSE DISPLAY "Aw, too bad. Maybe try running it again?" END-IF.
这段代码会先去掉输入的前后空格,再统一转为大写,之后只需判断是否等于"Y"即可。
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

