Fordern Sie zur Laufzeit so lange eine Eingabezeile an, bis der Benutzer etwas eingibt (außer einer leeren neuen Zeile), dh nicht mehr einfach Enteroder drückt OK. Ausgabe oder Ergebnis ist weder erforderlich noch verboten.
Pseudocode 1
myform = new form("GUI")
myform.mytxt = new editfield("")
myform.ok = new button("OK")
repeat
waitfor(myform.ok,"click")
until myform.mytxt.content <> ""
Pseudocode 2
LET TEXT = ""
WHILE TEXT = "" DO
TEXT = PROMPT("")
ENDWHILE
Beispiel 1
Das Programm wird ausgeführt und öffnet sofort ein Formular mit einem einzelnen Textfeld und einer OKSchaltfläche.
Benutzer klickt auf die OKSchaltfläche.
Nichts passiert.
Der Benutzer fügt "Hallo Welt" in das Textfeld ein und klickt auf die OKSchaltfläche.
Programm bricht ab.
Beispiel 2
Die Funktion wird aufgerufen und zeigt sofort eine leere Zeile und einen blinkenden Cursor an.
Benutzer drückt Enter.
Der Cursor bewegt sich eine Zeile nach unten.
Benutzer drückt Enter.
Der Cursor bewegt sich eine Zeile nach unten.
Benutzer drückt PPCGEnter
Funktion kehrt zurück.
Antworten:
TI-BASIC, 2 Bytes
TI-BASIC macht das automatisch. Sobald die Eingabe erfolgt ist, wird sie beendet.
Hier ist ein GIF:
Beobachten Sie die Anzahl der enterTasten in der Tastendruck-Historie. Erstellt mit TI-SmartView CE und ezgif.com .
quelle
Python 3 , 18 Bytes
Probieren Sie es online!
quelle
sed, 4
Wartet auf eine Eingabezeile mit 1 oder mehr Zeichen und wird dann beendet.
Probieren Sie es online aus . Aber es funktioniert besser auf einer Live-Shell:
quelle
JavaScript,
372217 BytesErläuterung
Das
while
Schlüsselwort startet diewhile
Schleife. Fordert im Zustand der Schleife eine!prompt()
Eingabe an und prüft, ob diese gegeben ist oder nicht. Wenn es nicht gegeben ist, wird der Rumpf der Schleife ausgeführt, der in unserem Fall leer ist, dann kehrt der Interpreter zur Schleifenbedingung zurück. Der gleiche Vorgang geschieht immer wieder, bis der Benutzer die Eingabe vornimmt.quelle
while(""==prompt(""));
;
, während Ihr anfänglicher Ausdruck ohne gut funktioniert hat;
. Irgendeine Idee warum?;
kann, können Sie dieses Byte speichern :-)Java, 55 Bytes
Wenn ich mich richtig erinnere (es ist schon eine Weile her, seit ich bei PPCG aktiv bin), kann mein Programm nur eine Funktion sein.
Dies ist systemspezifisch. Dies funktioniert nur auf Systemen, bei denen das Zeilenendezeichen eine einzelne neue Zeile ist. Wenn das Zeilenendezeichen stattdessen ein Zeilenumbruch ist, ersetzen Sie das Zeichen
10
durch13
. Unter Windows funktioniert dies nicht, wie dies bei Windows der Fall ist\r\n
.Dies macht sich die Tatsache zunutze, dass ich direkt auslesen kann
System.in
.quelle
\r
, anstatt die gesamte Zeichenfolge zu testen, und dann Probleme mit zwei EOL-Zeichen bekommen?System.in
Sie direkt tun können (Sie können mehrere Zeichen gleichzeitig lesen). Mein Schleifenkörper (leer) wird für jedes Zeichen in der Eingabe ausgeführtHTML5,
3322 BytesErläuterung
Das
required
Attribut auf<input>
veranlasst den Browser, den Benutzer über die Nachricht "Dieses Feld ist erforderlich" zu informieren, wenn er keinen Wert eingibt. Wenn sie jedoch einen Wert eingeben, wird der Wert an die URL desaction
Attributs von gesendet<form>
(in unserem Fall die aktuelle Datei selbst, da wir keinen Wert explizit angegeben haben).Dies wurde auf der neuesten Version von Google Chrome (Version 55.0) getestet. Funktioniert möglicherweise in anderen Browsern und Versionen.
quelle
action=/
might work on some browsers.action
attribute altogether.action=y.p
isn't necessary, as most User Agents will submit to the same location if noaction
is specificed<form><input required>
on the latest Google Chrome version and works as intended. And if you're skeptical, just useaction=#
. That saves 2 bytes.required
attribute! Also,#
is a path available since HTML 1.0, if I'm correct. And adding noaction
to your form is the same asaction="."
, which is the file itself.Jelly, 3 bytes
Not much to look at on TIO, I'm afraid.
Try it online!
How it works
This is a niladic program, meaning that it takes no input arguments. The implicit argument and return value are both 0 in this case.
¿
(while) is a quick that pops two links from the link stack: a condition (Ṇ
) and a body.Ṇ
is a monadic atom: flat logical NOT. If the previous return value is falsy (here, 0 or an empty string), it returns 1 and the body is called.ɠ
is a niladic atom; it reads a raw line from STDIN and returns the result.Once
ɠ
reads a non-empty line,Ṇ
returns 0 and we break out of the loop.quelle
Pyth, 3 bytes
Try it online!
Translated to Python:
quelle
brainfuck, 26 bytes
Try it online!
quelle
,.
to the end to verify.Perl 5, 8+1 (-p or -n flag) bytes
Takes input from stdin and dies as soon as the regex matches anything except a newline.
quelle
C,
52 bytes,33 bytes, 29 bytes-19 bytes thanks to Justin
-4 bytes thanks to Christoph
10 is equal to '\n' - In case this isn't obvious.
quelle
;
instead of the{}
for the while loop#include<stdio.h>
if you switch towhile(getchar()==10)
:int main(){while(getchar()==10);}
.main(){while(getchar()==10);}
ist genug, keine Notwendigkeit für die Standard-Int.main(){scanf("%s");}
would also work, if space-only lines can count as empty.Bash, 51 bytes (39 without "#!/bin/bash")
It's my first time participating in PPCG, so dont be to rude ;D
quelle
#!/bin/bash
[ -z `line` ] && $0
or if the deprecatedline
is not on your system:[ -z `head -n1` ] && $0
. That should either be 20 or 24 bytes.Java,
128126 bytes2 bytes thanks to Kevin Cruijssen.
Try it online!
quelle
while
to afor
and put theScanner s=new Scanner(System.in);
inside it. And change the.equals("")
to.isEmpty()
.while(new java.util.Scanner(System.in).nextLine().isEmpty());
C# (.NET Core), 66 bytes
Try it online!
-6 bytes thanks to raznagul.
quelle
System.Console.ReadLIne
directly and drop theusing
-Statement.while
loop would be the same number of bytes, but methinks a more idiomatic way of writing the code than afor
loop.QBasic 4.5, 15 bytes
Asks for input, then checks if any was given. If not,
RUN
restarts the program.quelle
RUN
. +1. (That rhymes too; RUN and PLUS ONE :) )Ruby, 13 bytes
I wish
gets
took a Regexp argument.quelle
R,
27242322 bytesTakes input from stdin, and repeat as long as input is of length 0. Cut off some bytes due to Jarko Dubbeldam and MickyT. Replaced the
{}
witht
to save another byte.quelle
,''
, since neither input (string or numeric) nor way of terminating was specified in the challenge.while(!sum(scan()^0)){}
work as well?sum()
. Too bad the^0
is need to handle0
as input.sum
, thanks! I've updated the answer.PHP, 18 bytes
quelle
readline()
returns something else than an empty string. Non empty strings evaluate totrue
in php - atleast most of them do. "0" seems to be an exception as I just read in the docs. Well I guess my answer is wrong now.AWK,
811 bytesWait for input. If the number of fields in input is more than 0, exit.
EDIT:
I've just realized that this doesn't work for input containing whitespace characters only. IFS needs to be set to empty string using
-F ""
command line option. Therefore +3 bytes.Try it online!
quelle
NF
with1
. Then you don't need to setIFS
. And grumble you beat me to andAWK
solution.NF
with1
. In that case the program exits given any input, including empty newline.SpecBAS - 34 bytes
Just loops until non-empty string is entered.
quelle
Mathematica,
2620 bytesquelle
For[,Input[]==Null,]
. Works just as well.Haskell,
1917 bytesDefines a function
f
that if it reads the empty line calls itself again. When reading a non-empty line an exception is raised and the recursion is stopped.Edit: @Laikoni replaced the parameter with a pattern match and saved 2 bytes. Thanks!
quelle
f=do""<-getLine;f
Aceto,
954 bytesr
ead a value, negate it (!
; implicitly casting to a boolean), and mirror horizontally if the value is truthy (|
).quelle
Java,
666460 bytesMy first Java answer, would love some tips!
quelle
return
and!
..equals("")
==.isEmpty()
. You can return int instead of String. OTOH, return void but eitherwhile(System...)
orif(System...)a();
int a(){..?0:a();}
, saves 3 bytesBraingolf, 8 bytes [non-competing]
Non competing because
{
, which reads input from STDIN, was added to braingolf after this challenge's post date.Explanation:
quelle
Charcoal, 4 bytes
Explanation
quelle
05AB1E, 5 bytes
Explanation:
Try it online!
quelle
PowerShell, 20 Bytes
runs a for loop,
read-host
prompts for inputif read-host returns nothing it evals to false, so we invert that
!(...)
and use that as the loop end check.much shorter than any
do{$a=read-host}while($a-eq"")
type solution involving variables.quelle
Swift, 22 bytes
quelle
CJam, 5 bytes
Try it online! (TIO doesn't really show the proper behaviour)
Explanation
quelle