按任意键继续


36

你的任务是创建一个程序,将显示下面的文本,等待用户按一个键(它是好的忽略像钥匙ctrlaltcaps lock等,只要键,如lettersnumberssymbols,并enter没有忽略),然后终止程序:

Press any key to continue... 

尾随换行符是允许的。按下键后,程序必须立即退出。另外,该程序必须是可移植的(即,没有特定于操作系统的头文件或模块,不能在IDE外部运行,等等)。


提示必须与上面显示的完全一样,除非不能避免在结尾的换行符。


这是,因此最短的答案以字节为单位。这也是我的第一个代码高尔夫球问题,因此,如果我不了解PPCG规则,我深表歉意。


4
输出文本区分大小写吗?WinBatch PAUSE是一个有效的答案吗(省略号从传播.... . .)?
FlipTack

13
我也建议等待一两个星期再接受任何答案
Kritixi Lithos

3
大多数语言的pause功能可能对Caps-Lock或Control(自行按下)之类的键不敏感。也许,如果该计划允许没有注意到这些键,你应该澄清
路易斯Mendo

15
您应该等待几周才能接受答案,因为无数其他人都建议您(但您已经选择忽略了他们的建议)
FlipTack

12
@JungHwanMin我同意别人的观点。请耐心等待解决方案,直到条目停止滚动。我真的不喜欢乘坐声望过山车
Suever

Answers:


5

SmallBasic,18 17字节

  • 版本2.0

17字节

TextWindow.Show()
  • 版本1.0

18字节

TextWindow.Pause()

3
你也不能做TextWindow.Show()吗?根据这个网站,应该有相同的效果。
Suever

20

批次,46个字节

@echo Press any key to continue...
@pause>nul

因为pause的输出在每个输出之前包含一个空格.


5
重定向很好。您还可以将输出发送到x吗?然后x将创建一个保存文本的文件Press any key to continue . . .。节省2个字节,但是我不确定这是否违反此挑战或任何标准漏洞。
steenbergh

一段时间以来,我一直在使用不使用choice.exe的系统,但@choice /n /m Press any key to continue...几十年前我也有可能。
manatwork

Choice具有默认值J和N,因此,如果我没有记错的话,只有在按下J或N时程序才会继续运行。
geisterfurz007

@ geisterfurz007另外,默认值已本地化。例如,对我choice来说相当于choice /c SN(葡萄牙语中的sim(是)和não(否))。
Ismael Miguel

啊,你说得对,@ geisterfurz007。现在,我记得枚举整个字母的批处理文件看起来多么愚蠢。好的,那是个绝妙的主意。
manatwork

15

HTML + JavaScript(ES6),36 + 25 = 61字节

您无法真正退出JavaScript程序,因此清除网页是我能想到的最好方法。

onkeyup=_=>a.innerHTML=''
<a id=a>Press any key to continue...


HTML + JavaScript(ES6),33 + 28 = 61字节

@LarsW建议的替代解决方案该解决方案重定向到about:blank

onkeyup=_=>location='about:blank'
Press any key to continue...


HTML / JavaScript,60个字节

@Ismael Miguel的另一个很棒的解决方案,它不使用独立的JS。保存了1个字节!

<html onkeyup=this.innerHTML=''>Press any key to continue...


HTML + JavaScript(ES6),26 + 28 = 54字节

@George Reith的另一个解决方案利用文档写入。

onkeyup=_=>document.open()
Press any key to continue...

HTML + JavaScript(ES7),23 + 28 = 51字节

使用建议的ES7绑定运算符的相同程序:

onkeyup=::document.open
Press any key to continue...


由于大多数解决方案都不属于我自己,因此请有礼貌并在评论中将其投票!


10
36 + 25是61还是我缺少什么?

2
@LarsW,ckjbgames好吧,机会是什么?直到您写下它,您才知道!;)
darrylyeo

2
<html onkeyup=this.innerHTML=''>Press any key to continue...<-60个字节。在jsfiddle.net/xhb69401尝试(它与<html>和一起使用<body>
Ismael Miguel

2
清除文档的较短方法,不需要锚点。onkeyup=_=>document.open()Press any key to continue...用于总计的54个字节。
乔治·瑞斯

2
同样,使用es-next提出的bind运算符,可以将其简化为onkeyup=::document.open
乔治·瑞斯

14

MATL,35个字节

'Press any key to continue...'D0$Y.

说明

'Press any key to continue...'      % String literal
D                                   % Display the string (has trailing newline)
0$Y.                                % Pause until the user presses any key

@LuisMendo Ah好抓
Suever

2
另一方面,Y.也不是。也许OP应该澄清。在大多数解决方案中,诸如Control和Caps-lock之类的键都将失败
Luis Mendo

1
@LuisMendo可以错过控制键,大写锁定等
。– ckjbgames

@LuisMendo您的修改不需要回车键吗?也许我记错了
Suever

@Suever哦,当然!需要输入
Luis Mendo

11

TI-Basic,55个字节

基本上,它循环直到按下某个键。太差的小写字母在TI-Basic中每个都是两个字节...

Disp "Press any","key to continuesin(
Repeat getKey
End

PS请参阅@GoldenRatio的评论,以获取有关其工作原理的解释。天才!


首先,您的字节数当前为关闭,实际上是55个字节(仅在TI-84 +上编写并经过测试)。其次,从技术上讲这是无效的,因为它不会显示按任意键继续...而是削减到15个字符以上...而是保留字节数,使其成为两个disp命令。:Disp "Press any(不要忘记:在您的代码中,它很重要)和Disp "key to continuesin((罪孽迫使...在1个字节中弥补新的行和显示,这节省了任意和键之间的空间)
黄金比率

击败我,我想到的第一语言。
C安德森

感谢@GoldenRatio的提示,我想我当时想的getKey是2个字节,实际上是1个字节。我想可以,Text(或者Output(您可以将它们全部放在一行上。但是,您的建议更好。我没有考虑过在行尾使用隐式省略号。再次感谢,我现在将对其进行编辑。
Timtech '17

Thx用于更新它,我猜想最后用逗号使用disp是有充分的理由的,因为它从未保存字节。由于我倾向于按清除按钮:D,因此通常将它们分开放置。另外,有没有官方的尺码得分方法?我的意思是说,我应该计入程序名的9个字节是否应该计入?不能删除起始冒号的1个字节吗?我确实将其标记为0字节,因为为了找到空间,我习惯将程序大小减去10,但是冒号应该算在内。
黄金比例

不,基本上,如果您制作一个完全为空的程序,它的计数为0字节,则从此处开始。这就像计算源文件的文件名。同样,开始的冒号只是为了显示,实际上并不是程序的一部分。实际上,每个换行符都会在计算器的编辑器中自动显示一个冒号,但同样,这些只是用于显示(请尝试使用cemetech sourcecoder来了解我的意思)。最后,无论我们是否分成Disp两行,字节数都是相同的(但是,并非总是这样)。
Timtech '17

8

Bash,46 43 42字节

@DigitalTrauma节省了1个字节

read -rn1 -p"Press any key to continue..."

使用read内置的。-r确保它不允许用户输入转义符。-n 1只允许一个字符。-p是提示


在我命中<cr>之前不会继续
Glenn Randers-Pehrson

@ GlennRanders-Pehrson我相信,如果您的bash不支持,可能会发生这种情况-n 1。对于我来说(v3.2.57)和我的debain机器(v4.3.30)都不会击回车,它的工作原理
Downgoat

如果我输入引号(“)也不起作用
Glenn Randers-Pehrson

1
如果我将该行放入文件(anykey.sh)并运行该文件,则工作正常。即使我删除了“ -rn”和“ 1”之间的空格,它也可以正常工作。
Glenn Randers-Pehrson's

1
-rn1保存1个字节
Digital Trauma'1


5

八度/ MATLAB,42字节

disp('Press any key to continue...');pause

我在一个月前对这个答案进行了投票,认为这是最佳选择……但是您已经不高兴了:)
Stewie Griffin

4

QBasic(QB64),37(42?)个字节

不幸的是,QBasic的内置程序结尾提示没有省略号,因此我们必须自己打印它:

?"Press any key to continue..."
SLEEP

SLEEP不带参数的情况要等到按键。)

该代码执行了问题的字面意思,但似乎并不符合问题的实质,因为QBasic当然会显示“按任意键继续”,并等待按键,然后返回IDE。这是直接进入IDE的,为+5字节:

?"Press any key to continue..."
SLEEP
STOP

STOP是调试语句。在常规的QBasic中,它设置了一个断点:执行暂停,我们返回到IDE,但是可以使用F5重新开始执行。目前尚不清楚这是否算作程序“退出”。但是,我正在使用QB64仿真器,它不能执行断点。遇到时STOP,它只是停止了操作,直接返回到IDE,而没有多余的“按任意键”消息。


奇怪的是,在执行独立的QB64 exe时也会显示“按任意键继续”。我曾经尝试LOCATE仅在其后打印点,但是QBasic在打印此消息时会清除整个底部行……
steenbergh

4

处理中,89 81字节

void setup(){print("Press any key to continue...");}void draw(){if(key>0)exit();}

说明

void setup(){print("Press any key to continue...");}

这是必需的,因为我在程序中使用了多个功能。里面的任何东西都会setup()被调用,在这种情况下是string "Press any key to continue..."

if(key>0)exit();

检查keykey将始终包含最后按下的键的int值)是否大于0(即不是空字节)。如果满足条件,则程序退出。

void draw(){}

draw() 确保程序启动后始终保持寻找键,而不是停止键。

(当使用类似Java的语言的内建函数仍然很冗长时,会感到...)


我并不真的知道处理,但我认为你应该能够取代void steup(){...}static{...}
帕维尔

2
@Pavel Nope,行不通
Kritixi Lithos

4

Pascal,75 65字节

使用Free Pascal编译器3.0.0版对此进行了测试。
它可能与TurboPascal 7或更高版本一起使用。

uses Crt;begin write('Press any key to continue...');readkey;end.

可悲的是,我不能代替readkeyreadln,因为这一挑战要求所有主要的被接受。


我已经在http://rextester.com/l/pascal_online_compiler上测试了此代码,有无提供输入。
正如预期的那样,该程序在10秒钟后终止,因为它一直在等待从未发生的按键。


感谢@manatwork通过证明我错误并为我节省了10个字节,并表明我不需要program _;


FreePascal和TurboPascal都不需要使用program关键字。(实际上,我从未遇到过如此古老的实现方式。)
manatwork

@manatwork我没有试过program,它抱怨。另外,有时我会使用TurboPascal。那需要(注意:requiresprogram那里。如果您知道可以在不使用的情况下测试其运行位置的任何地方program,则将其删除。我讨厌在那里。还有那个uses Crt;
伊斯梅尔·米格尔

1
我不明白你 包括您链接的rextester服务,它都可以正常工作。在我的命令行中:pastebin.com/pVr9dqxd
manatwork

@manatwork你是对的。我知道为什么会抱怨:我写了program;而不是实际删除了那一点。感谢您提醒我。
Ismael Miguel

4

暂存,81个字节

图片

when gf clicked
say [Press any key to continue...
wait until <key [any v] pressed

Scratchblocks链接

如果您希望它在按下某个键(包括其他线程)时停止整个程序,则必须添加一个stop all。如果您想摆脱“说”对话框,则需要一个空白say块(stop all也可以使用)。

方便的是Scratch具有内置功能!


4

Bash 48 44 42字节

read -rn1 -p"Press any key to continue..."

@ mame98感谢您保存4个字节。

@RaisingAgent感谢您保存2个字节。


您可以通过添加标志来改善这一点,例如read -srn1 -p".."删除Promt引号中的最后一个空格。另外,我不确定您是否需要's'标志
mame98 '17

1
删除引号中的最后一个空格_-s
RaisingAgent

@RaisingAgent谢谢,已更新:)
亚伯汤姆

3

R,56个字节

cat('Press any key to continue...');keypress::keypress()

这适用于Linux和OSX终端。


3

Ruby(2.3)(+批处理),52 55 54 53 46字节

现在有了Alexis Andersen,现在有了46个字节。

注意:在Windows上测试,如果没有pause命令,则可能无法正常工作。

puts"Press any key to continue...";`pause>nul`

说明

Puts 所需文字:

puts"Press any key to continue..."

结束一行:

;

运行Batch pause命令并将管道输出到nul

`pause>nul`

您好,欢迎来到PPCG。我看到您的提交内容中有一个编辑列表。尽管这在其他站点上可能很常见,但是由于任何人都可以看到帖子的编辑历史记录,因此我们通常将正文的历史记录保留在正文之外(除了字节数删除线以外)。这似乎是一个不错的第一场高尔夫,希望您在这里玩得开心。
小麦巫师

@WheatWizard谢谢,我应该将编辑保留在那里还是将其删除?
notme1560

1
我认为,如果您删除它们,那么答案会更容易理解,我个人建议这样做。
小麦巫师

您可以通过用反引号替换系统来缩短它:` pause>nul`或更短,只需使用gets(而且,在注释中的代码块中也没有反引号的好方法)
Alexis Andersen

@AlexisAndersen不gets等待输入,而不仅仅是任何键?
notme1560

3

Java,127个字节

class P{public static void main(String[]a)throws Exception{System.out.print("Press any key to continue...");System.in.read();}}

注意:必须将控制台设置为原始模式,此功能才能起作用。


然后,恐怕您的代码应该设置控制台,就像original.leginPerl解决方案一样。
manatwork

@manatwork,Also, the program must be fairly portable (i.e no OS-specific headers or modules, runs outside of an IDE, etc.)如果您遵循该SO链接,则没有独立于操作系统的方式来执行此操作。意思是,您链接的答案与该答案同样有效。

3

SmileBASIC,52个字节

?"Press any key to continue...
WHILE""==INKEY$()WEND

3

Python 2,110字节

import curses as c
s=c.initscr()
c.cbreak()
s.addstr(0,0,'Press any key to continue...')
while not s.getch():1

2

Mathematica,62个字节

EventHandler["Press any key to continue...","KeyDown":>Exit[]]

说明

EventHandler["Press any key to continue...","KeyDown":>Exit[]]
EventHandler[                                                ]  (* Create a new EventHandler *)
             "Press any key to continue..."                     (* Print the dialog text *)
                                            "KeyDown":>Exit[]   (* When a key is pressed down, exit *)

2

SmileBASIC,55个字节

?"Press any key to continue..."@L IF INKEY$()!=""GOTO@L

解释:

?"Press any key to continue..."  '? means PRINT
@L                               'start of loop
IF INKEY$()!="" GOTO @L          'if no key pressed goto @L

WHILE""==INKEY$()WEND较小
12Me21'1

2

Python 2/3 POSIX,85字节

import sys,tty
print('Press any key to continue...')
tty.setraw(1)
sys.stdin.read(1)

2

Python 3,65个字节

需要Windows版本的Python。

from msvcrt import*
print("Press any key to continue...")
getch()

msvcrt.getch()不像输入()一样等待按下Enter键,它返回按下的第一个键。

msvcrt.getch()的Python文档:https ://docs.python.org/3/library/msvcrt.html#msvcrt.getch

感谢@Fliptack节省了一些字节


这个答案在没有import msvcrt地方的地方是无效的
FlipTack

2
由于这是代码高尔夫,因此您应该从代码中删除注释。此外,使用from msvcrt import* 似乎要短1个字节
FlipTack

很酷,谢谢@FlitTack
Zachary Smith,

2

Node.js的,102 101 99个字节

with(process)stdout.write('Press any key to continue...'),s=stdin,s.setRawMode(1),s.on('data',exit)

收益不多,仅用以下字符缩短了1个字符withpastebin.com/BhrAyq2K
manatwork

@manatwork不错!第一次with为我节省了一个字节(或多个字节)
George Reith

1
现在,您可以删除大括号并将换行符替换为逗号,再加上2个字节。
darrylyeo

另外,如果我没记错的话,stdout.write`Press any key to continue...`将在ES6中保存2个字节。
darrylyeo

@darrylyeo逗号工作真是太棒了!不幸的是,这里不能使用带标签的模板文字,因为它实际上是在数组中传递的,并且process.stdout.write不进行隐式转换为字符串(只是错误)。
乔治·瑞斯

2

Sinclair ZX81 / Timex TS1000 BASIC:方法1约41个字节

1 PRINT "PRESS ANY KEY TO CONTINUE..."
2 GOTO (INKEY$<>"")+VAL "2"

方法2大约38个字节

1 PRINT "PRESS ANY KEY TO CONTINUE..."
2 PAUSE VAL "4E4"

我更喜欢方法1,就像在ZX81上一样,当 PAUSE调用,并且如果您想要足够长的时间(假设ZX81不会过热或崩溃),则暂停将最终结束,而方法1则停留在一个无限循环,直到按下一个键为止,并且没有屏幕闪烁。

当我有正确的BASIC位会告诉我时,我将计算出正确的字节数。顺便说一下,使用VAL“ x”而不是数字可以节省ZX81上的宝贵RAM(我认为ZX Spectrum也是如此)。


两种方法都可以在Sinclair ZX Spectrum上使用,优点是Spectrum具有大小写字母,而ZX81默认没有(并且没有单引号作为标准字符)。
Shaun Bebbers

Sinclair ZX频谱上的方法2可以压缩为1 PRINT "Press any key to continue...": PAUSE 4e4
Shaun Bebbers

1
PAUSE 0永远停下来。
尼尔

是的,我已经很长时间没有使用Sinclair Spectrum BASIC进行编程了,以至于我忘记了这一点。PAUSE 0在ZX81中,BASIC不会永远暂停。
Shaun Bebbers

1

Perl 5,79字节

system "stty cbreak";$|=1;print "Press any key to continue...";read(STDIN,$a,1)

用作:

perl -e 'system "stty cbreak";$|=1;print "Press any key to continue...";read(STDIN,$a,1)'

当然没有奖品。我敢肯定,一些perl人会有更好的方法。

(如果计数也需要包括解释器调用,则为89个字节)


@Pavel,他数system了他的字节数,所以我不知道您对那条评论的意思。
达达

1
@ original.legin我认为Perl不会比这做得更好。您仍然可以打几个字节:$|=1没必要,print在后面有一个空格,可以在的参数周围加上括号read,可以使用反引号而不是system,最后print返回1,因此可以使用它代替到1的电话里的垃圾read。所以最终,我们得到:perl -e '`stty cbreak`;read STDIN,$a,print"Press any key to continue..."'
Dada

@Dada您也可以使用削减2个字节say,尽管我认为这种方法无法满足“便携式”要求。我能找到的最佳便携式解决方案是perl -MTerm::ReadKey -E'say"Press any key to continue...";ReadMode 3;ReadKey'(52个字节+ 16个字节-MTerm::ReadKey<space>)。请注意,这将弄乱您的终端,除非您使用结束最后的读取模式ReadMode 1
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot确实,我没有看到有关可移植性的要求。关于say,我倾向于不再使用它(我主要同意 meta帖子)。现在回到短码,IO::Prompt将比较短的Term::ReadKey(40 + 13 = 53个字节): perl -MIO::Prompt -e 'prompt"Press any key to continue... ",-1'。碰巧的是,它甚至比我之前的评论中的建议还短。
达达

1
@Dada我可以看到-E论点的两面。但是,我上次检查时,JB的答案已经四年没有争议了,所以我一直在这样做。也许我需要重新审视一下。至于IO :: Prompt,好发现!尽管它在Windows上的Strawberry 5.20.2上不起作用,而Term :: ReadKey可以。
ThisSuitIsBlackNot

1

PHP,73字节

echo"Press any key to continue...";$h=fopen("php://stdin","r");fgets($h);

在PHP交互式shell(php -a)中运行它


“按下键后,程序必须立即退出。” –这要等到Enter或停电…
manatwork

1

C#,101个字节

using C=System.Console;class P{static void Main(){C.Write("Press any key to continue...");C.Read();}}

在Linux上进行了测试,应该可以在具有.NET库和Common Language Runtime的任何系统上运行。

非高尔夫节目:

using C = System.Console; // creating a shorter alias for the System.Console class

class P
{
    static void Main()
    {
        C.Write("Press any key to continue...");    // prints the message
        C.Read();   // waits for key press
    }
}

CTRL,ALT,SHIFT被忽略。如果可以打印,将在屏幕上回显所按下的键。

可以通过将C.Read()替换为C.ReadKey(0 <1)来禁用Echo ,但要多花 6个字节。


1

8th,47字节

"Press any key to continue..." . cr con:key bye

该程序将忽略ctrl,alt,caps lock之类的键。用字母,数字,符号和Enter之类的键退出。

说明

"Press any key to continue..." . cr \ Print message 
con:key                             \ Wait for key input from console  
bye                                 \ Quit program 

在Windows上,您仅可以节省3个字节cr
混沌庄园

1

C#,29个字节

class P{static void Main(){}}

不知道这是否有效,因为它会打印:

按任意键继续 。。。

但是有一个批处理答案也可以打印出来。


1

Forth(gforth),39个字节

." Press any key to continue..."key bye

(是的,已经有第8个解决方案,但是更短)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.