goto此时出乎意料

Posted

技术标签:

【中文标题】goto此时出乎意料【英文标题】:goto was unexpected at this time 【发布时间】:2013-11-11 03:41:47 【问题描述】:
@echo off
color 0a
title Horror Game
echo.
echo.
echo.
echo.
echo Welcome to the game
echo If you get scared
echo Feel free to leave
echo.
echo.
echo You are in a dark room.
echo It is cold.
echo All you hear is a scratching sound
echo near your feet.
echo What do you do?
echo.
echo.
echo 1.) Feel around you
echo 2.) Listen for anything else
set/p input = Command?
if %input% == "1" goto Feel
if %input% == "2" goto Listen
echo.
echo.
:Feel
echo You feel around and hear a growl.
echo As you realize the scratching was
echo on your leg.
echo. 
echo You remember nothing else.
pause
end

我正在尝试为 cmd 制作一个基于文本的游戏,每当我尝试输入响应时都会立即关闭,我几乎无法读出“此时 goto 出乎意料”

【问题讨论】:

【参考方案1】:

你没有正确地形成你的测试。您需要将变量括在双引号中:

if "%input%" == "1" goto Feel
if "%input%" == "2" goto Listen

请注意,在这些之后您需要一个额外的条件来处理他们没有输入 1 或 2 的可能性。

您应该考虑使用choice 命令而不是set /p。在命令提示符下键入 choice /?

以后,如果您遇到提前终止问题,请从命令提示符运行您的脚本。这样窗口就不会对你关闭,你将有足够的时间来阅读错误。

您可以通过按 -R、输入 cmd 并按 Enter

快速运行命令提示符

【讨论】:

+1 使用此方法,您可以输入两个单词的答案,也可以不输入答案,不会出现任何错误。【参考方案2】:

您应该删除set 命令中input= 之间的空格,否则您实际上是在设置一个名为input  的变量(末尾有一个空格)。这按预期工作:

echo 1.) Feel around you
echo 2.) Listen for anything else
set/p input=Command?
if %input% == "1" goto Feel
if %input% == "2" goto Listen
echo.
echo.
:Feel
echo You feel around and hear a growl.
echo As you realize the scratching was
echo on your leg.
echo. 
echo You remember nothing else.

但是,如果在%input% 周围不加引号,如果用户输入的输入中有空格,则会产生unexpected goto 错误。 paddy 建议使用选择命令可能是要走的路。

【讨论】:

以上是关于goto此时出乎意料的主要内容,如果未能解决你的问题,请参考以下文章

第七章:C语言循环

Goto语句

JAVA中有没有Goto?

goto语句为啥不受待见

goto 语句

协程和`goto`之间的区别?