W czasie wykonywania monituj o wiersz danych wejściowych, dopóki użytkownik nie wprowadzi czegoś (innego niż pusta nowa linia), tj. Nie tylko naciska Enterani OK. Wynik lub wynik nie jest wymagany ani zabroniony.
Pseudokod 1
myform = new form("GUI")
myform.mytxt = new editfield("")
myform.ok = new button("OK")
repeat
waitfor(myform.ok,"click")
until myform.mytxt.content <> ""
Pseudokod 2
LET TEXT = ""
WHILE TEXT = "" DO
TEXT = PROMPT("")
ENDWHILE
Przykład 1
Program działa i natychmiast wyskakuje formularz z pojedynczym polem tekstowym i OKprzyciskiem.
Użytkownik klika OKprzycisk.
Nic się nie dzieje.
Użytkownik wkleja „hello world” w pole tekstowe i klika przyciskOK przycisk.
Program kończy się.
Przykład 2
Funkcja jest wywoływana i natychmiast wyświetla pustą linię i migający kursor.
Użytkownik naciska Enter.
Kursor przesuwa się o jedną linię w dół.
Użytkownik naciska Enter.
Kursor przesuwa się o jedną linię w dół.
Użytkownik naciska PPCGEnter
Funkcja zwraca.
Odpowiedzi:
TI-BASIC, 2 bajty
TI-BASIC robi to automatycznie. Po podaniu danych zostanie zakończone.
Oto GIF:
Obserwuj liczbę enternaciśnięć klawisza w historii naciśnięć klawiszy. Utworzono za pomocą TI-SmartView CE i ezgif.com .
źródło
Python 3 , 18 bajtów
Wypróbuj online!
źródło
sed, 4
Czeka na linię wejściową zawierającą 1 lub więcej znaków, a następnie kończy działanie.
Wypróbuj online . Ale działa lepiej w przypadku powłoki na żywo:
źródło
JavaScript,
372217 bajtówWyjaśnienie
Słowo
while
kluczowe uruchamiawhile
pętlę. W stanie pętli!prompt()
pyta o dane wejściowe i sprawdza, czy są one podane, czy nie. Jeśli nie zostanie podany, ciało pętli zostanie wykonane, które w naszym przypadku jest puste, wówczas interpreter wraca do stanu pętli. Ten sam proces odbywa się w kółko, dopóki użytkownik nie poda danych wejściowych.źródło
while(""==prompt(""));
;
, a początkowe wyrażenie działało bez;
. Masz pomysł, dlaczego?;
, możesz zapisać ten bajt :-)Java, 55 bajtów
Jeśli dobrze pamiętam (minęło trochę czasu, odkąd jestem aktywny na PPCG), mój program może być tylko funkcją.
Jest to specyficzne dla systemu; działa tylko w systemach, w których znak końca wiersza jest pojedynczą nową linią. Jeśli znak end-of-line jest raczej powrót karetki, wymienić
10
się13
. W systemie Windows to nie działa, ponieważ w systemie Windows jest to koniec linii\r\n
.Wykorzystuje to fakt, że mogę czytać bezpośrednio z
System.in
.źródło
\r
, w przeciwieństwie do testowania całego łańcucha, a następnie napotkania problemów z występowaniem 2 znaków EOL?System.in
co możesz zrobić bezpośrednio (cóż, możesz jednocześnie czytać tablicę znaków). Moje ciało pętli (puste) jest uruchamiane dla każdego znaku na wejściuHTML5,
3322 bajtówWyjaśnienie
required
Atrybut na<input>
powoduje, że przeglądarka informuje użytkownika „To pole jest wymagane” -sort depeszy, jeżeli nie wprowadzić wartość. Jednak po wprowadzeniu wartości wartość jest wysyłana na adres URLaction
atrybutu<form>
(którym w naszym przypadku jest sam plik bieżący, ponieważ nie podaliśmy żadnej wartości jawnie).Zostało to przetestowane na najnowszej wersji Google Chrome (wersja 55.0). Może działać w innych przeglądarkach i wersjach.
źródło
action=/
może działać w niektórych przeglądarkach.action
całkowicie rzucić atrybut.action=y.p
jest to konieczne, ponieważ większość agentów użytkownika prześle się do tej samej lokalizacji, jeśli nieaction
określono<form><input required>
na najnowszej wersji Google Chrome i działa zgodnie z przeznaczeniem. A jeśli jesteś sceptyczny, po prostu użyjaction=#
. To oszczędza 2 bajty.required
atrybut! Ponadto,#
jest to ścieżka dostępny od HTML 1.0, jeśli się nie mylę. Dodanie „nie”action
do formularza jest tym samymaction="."
, co sam plik.Galaretka , 3 bajty
Obawiam się, że nie ma wiele do obejrzenia na TIO.
Wypróbuj online!
Jak to działa
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.źródło
Pyth, 3 bytes
Try it online!
Translated to Python:
źródło
brainfuck, 26 bytes
Try it online!
źródło
,.
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.
źródło
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.
źródło
;
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);}
is enough no need for default 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
źródło
#!/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!
źródło
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.
źródło
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.źródło
RUN
. +1. (That rhymes too; RUN and PLUS ONE :) )Ruby, 13 bytes
I wish
gets
took a Regexp argument.źródło
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.źródło
,''
, 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
źródło
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!
źródło
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.
źródło
Mathematica,
2620 bytesźródło
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!
źródło
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 (|
).źródło
Java,
666460 bytesMy first Java answer, would love some tips!
źródło
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:
źródło
Charcoal, 4 bytes
Explanation
źródło
05AB1E, 5 bytes
Explanation:
Try it online!
źródło
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.źródło
Swift, 22 bytes
źródło
CJam, 5 bytes
Try it online! (TIO doesn't really show the proper behaviour)
Explanation
źródło