Insista em uma resposta

31

Em tempo de execução, continue solicitando uma linha de entrada até que o usuário insira algo (que não seja uma nova linha vazia), ou seja, não apenas pressione Enterou OK. Saída ou resultado não é obrigatório nem proibido.

Pseudo-código 1

myform = new form("GUI")
myform.mytxt = new editfield("")
myform.ok = new button("OK")
repeat
  waitfor(myform.ok,"click")
until myform.mytxt.content <> ""

Pseudo-código 2

LET TEXT = ""
WHILE TEXT = "" DO
  TEXT = PROMPT("")
ENDWHILE

Exemplo 1

O programa é executado e aparece imediatamente um formulário com um único campo de texto e um OKbotão.
O usuário clica no OKbotão.
Nada acontece.
O usuário cola "olá mundo" no campo de texto e clica no OKbotão.
O programa termina.

Exemplo 2

A função é chamada e exibe imediatamente uma linha em branco e um cursor piscando.
O usuário pressiona Enter.
O cursor desce uma linha.
O usuário pressiona Enter.
O cursor desce uma linha.
O usuário pressiona a PPCGEnter
função retorna.

Adão
fonte
é permitido contar linhas somente de espaço como vazias?
12431234123412341234123
@ 12431234123412341234123 No.
Adám
É necessário aguardar a linha completa assim que o usuário começar a inserir dados?
Matteo Italia
Ok, a partir de um comentário na resposta excluída do @ CodyGray, parece que não é permitido.
Matteo Italia
@MatteoItalia Sim, correto; uma linha de entrada .
Adám

Respostas:

16

TI-BASIC, 2 bytes

:Prompt X

O TI-BASIC faz isso automaticamente. Uma vez que a entrada é dada, ela será encerrada.

Aqui está um GIF:

insira a descrição da imagem aqui

Assista a contagem da entertecla no histórico de pressionamentos de teclas. Criado com o TI-SmartView CE e ezgif.com .

Scott Milner
fonte
1
Hmm .. isso é 2 bytes?
precisa
9
O TI-BASIC é baseado em token .
Scott Milner
E não será necessário Enter para obter uma resposta? Existe algum lugar para testar isso online?
Adám 05/05
@ Adám Não é necessário entrar para obter uma resposta. Tanto quanto sei, não há nenhum lugar para o qual você possa ir online sem já ter uma imagem da TI ROM. No entanto, posso postar um gif quando chegar em casa.
5137 Scott Milner
1
@ Adám É ilegal testar o TI-BASIC online sem possuir uma ROM.
Erik the Outgolfer
15

Python 3 , 18 bytes

while''==input():0

Experimente online!

Dennis
fonte
19
Então, você continuará adicionando outro idioma a cada 9 minutos?
Adám 4/17/17
15

sed, 4

/./q

Aguarda uma linha de entrada que tenha 1 ou mais caracteres e sai.

Experimente online . Mas funciona melhor em um shell ativo:

sed '/./q'
Trauma Digital
fonte
15

JavaScript, 37 22 17 bytes

while(!prompt());

while(!prompt());

Explicação

A whilepalavra-chave inicia o whileloop. Na condição do loop, !prompt()solicita entrada e verifica se é fornecida ou não. Se não for fornecido, o corpo do loop é executado e, no nosso caso, está vazio, o intérprete retorna à condição do loop. O mesmo processo acontece repetidamente até o usuário fornecer a entrada.

Arjun
fonte
while(""==prompt(""));
Adám 4/17/17
@ Adám Wow. Eu estava pensando em como diminuir a solução e você veio com uma resposta obrigado!
Arjun
Parecia óbvio. No entanto, meu console do navegador se recusa a executar sem deixar rastro ;, enquanto sua expressão inicial funcionou bem sem ;. Alguma idéia do porquê?
Adám 4/17/17
Não, Chrome. Portanto, se qualquer motor de JavaScript pode lidar com omissão do atual expressão de ;, você pode salvar o byte :-)
Adám
1
@ Adám Acabei de descobrir a causa real do erro produzido após a remoção do ponto e vírgula do código-fonte. A razão pela qual isso acontece é que o loop while espera uma instrução (ou um grupo de instruções) como o corpo do loop após a condição do loop. Adicionar o ponto e vírgula faz pensar que o corpo do loop acabou. No entanto, remover o ponto e vírgula faz com que ela espere a próxima instrução como o corpo do loop. Mas, no nosso caso, nenhuma nova instrução vem após a condição do loop. Então, lança um erro. Espero que esteja claro agora. Eu sou péssimo em explicar coisas !! : p
Arjun
9

Java, 55 bytes

void f()throws Exception{while(System.in.read()==10);}}

Se bem me lembro (já faz um tempo desde que estou ativo no PPCG), meu programa pode ser apenas uma função.

Isso é específico do sistema; funciona apenas em sistemas em que o caractere de fim de linha é uma única nova linha. Se o caractere de fim de linha for um retorno de carro, substitua 10por 13. No Windows, isso não funciona, como é o fim de linha no Windows \r\n.

Isso faz uso do fato de que eu posso ler diretamente System.in.

Justin
fonte
2
Bem-vindo de volta, mesmo que apenas por esta resposta! : D
Conor O'Brien
3
Bem-vindo de volta, @Justin!
Digital Trauma
1
Não planeja ser ativo; A apenas impressionantes para uma pergunta aqui e ali
Justin
Para evitar o problema "não funciona no Windows", você não pode simplesmente testar o primeiro caractere e verificar se ele existe \r, em vez de testar toda a cadeia e, em seguida, encontrar problemas com a existência de 2 caracteres EOL?
Cody Grey
@CodyGray Não. Estou lendo 1 caracter por vez; isso é tudo o que System.invamos fazer diretamente (bem, você pode ler um conjunto de caracteres por vez). Meu corpo de loop (vazio) é executado para cada caractere na entrada
Justin
9

HTML5, 33 22 bytes

<form><input required>

<form><input required>

Explicação

O requiredatributo no <input>faz com que o navegador informe ao usuário "este campo é obrigatório" - tipo de mensagem, se ele não digitar um valor. No entanto, quando eles inserem um valor, o valor é enviado para a URL do actionatributo do <form>(que no nosso caso é o próprio arquivo atual, pois não especificamos nenhum valor explicitamente).

Isso foi testado na versão mais recente do Google Chrome (versão 55.0). Pode funcionar em outros navegadores e versões.

Arjun
fonte
action=/pode funcionar em alguns navegadores.
Neil
1
Você provavelmente poderia abandonar o actionatributo completamente.
Shaggy
1
@Arjun O action=y.pnão é necessário, pois a maioria dos agentes de usuário enviará para o mesmo local se não actionfor especificado
MayorMonty
@Arjun Tentei <form><input required>a versão mais recente do Google Chrome e funciona como pretendido. E se você é cético, basta usar action=#. Isso economiza 2 bytes.
Ismael Miguel
3
@ Arjun Essa é uma péssima idéia para o código de golfe. Não posso dizer sobre todos os navegadores, pois não possuo nenhum Android 1.0, 1.6, 2.0, 2.1, 3.0, 3.1, 4.xx, 5.x, 6.x, ..., iPhone 2 - 7, todas as versões do Google Chrome, Firefox 3.0 ou superior e assim por diante ... Na verdade, nem todos os navegadores HTML5 implementam o requiredatributo! Além disso, #existe um caminho disponível desde o HTML 1.0, se eu estiver correto. E adicionar não actionao seu formulário é o mesmo que action=".", que é o próprio arquivo.
Ismael Miguel
8

Gelatina , 3 bytes

ɠṆ¿

Não tenho muito o que ver no TIO, receio.

Experimente online!

Como funciona

Este é um programa niládico, o que significa que ele não aceita argumentos de entrada. O argumento implícito e o valor de retorno são 0 neste caso.

¿(while) é um rápido que exibe dois links da pilha de links: uma condição ( ) e um corpo.

é um átomo monádico: NÃO lógico e plano. Se o valor de retorno anterior for falso (aqui, 0 ou uma sequência vazia), ele retornará 1 e o corpo será chamado.

ɠé um átomo niládico; ele lê uma linha bruta de STDIN e retorna o resultado.

Depois de ɠler uma linha não-vazia, retorna 0 e interrompemos o loop.

Dennis
fonte
Tão rápido, né? Ah bem.
Adám 4/17
7

Pitão , 3 bytes

W!w

Experimente online!

Traduzido para Python:

while Pnot(input()):
 pass
Freira Furada
fonte
6

brainfuck , 26 bytes

+[>,----------[[-]<[-]>]<]

Experimente online!

Freira Furada
fonte
1
Que apontam TIO é tudo bom e bem, mas é um pouco difícil dizer o que acontece quando run ... ;-)
Adám
1
@Adám you can append ,. to the end to verify.
Leaky Nun
5

Perl 5, 8+1 (-p or -n flag) bytes

/./&&die

Takes input from stdin and dies as soon as the regex matches anything except a newline.

Chris
fonte
5

C, 52 bytes, 33 bytes, 29 bytes

-19 bytes thanks to Justin

-4 bytes thanks to Christoph

main(){while(getchar()==10);}

10 is equal to '\n' - In case this isn't obvious.

Skynet
fonte
1
You can golf it by 1 char by using a ; instead of the {} for the while loop
Justin
1
Although not standards compliant, you can remove the #include<stdio.h> if you switch to while(getchar()==10): int main(){while(getchar()==10);}.
Justin
2
@Justin main(){while(getchar()==10);} is enough no need for default int.
Christoph
1
main(){scanf("%s");} também funcionaria se as linhas somente de espaço puderem contar como vazias.
12431234123412341234123
1
@DanielEarwicker You are right. That didn't seem clear to me the first time I read the question, but now I see what you are saying. In that case, there are many non-conforming answers to this question.
Justin
5

Bash, 51 bytes (39 without "#!/bin/bash")

It's my first time participating in PPCG, so dont be to rude ;D

#!/bin/bash
read a
while [ -z "$a" ]
do
read a
done
Nicolas Fischer
fonte
1
Welcome to PPCG.
Adám
3
Welcome to PPCG!, if you're planning on using Bash as a golfing language you might find This Post Interesting, it has a bunch of tips for making bash programs as small as humanly possible, there's also a More General Version you might want to skim through too.
colsw
@ConnorLSW Wow, thanks, that Post will help me a lot. I'll try to edit my Answer with this new tips ASAP.
Nicolas Fischer
4
you do not need #!/bin/bash
12431234123412341234123
Well, also the first time for me :) But you could perhaps use recursion: [ -z `line` ] && $0 or if the deprecated line is not on your system: [ -z `head -n1` ] && $0. That should either be 20 or 24 bytes.
Yeti
4

Java, 128 126 bytes

2 bytes thanks to Kevin Cruijssen.

import java.util.*;class a{public static void main(String[]a){for(Scanner s=new Scanner(System.in);s.nextLine().isEmpty(););}}

Try it online!

Leaky Nun
fonte
1
You can golf it by two bytes: Change the while to a for and put the Scanner s=new Scanner(System.in); inside it. And change the .equals("") to .isEmpty().
Kevin Cruijssen
I'm pretty sure you can remove the import if you inline the use of the scanner; pretty sure leaking a scanner works just fine: while(new java.util.Scanner(System.in).nextLine().isEmpty());
Justin
4

C# (.NET Core), 66 bytes

class C{static void Main(){for(;System.Console.ReadLine()!="";);}}

Try it online!

-6 bytes thanks to raznagul.

Pavel
fonte
1
You can save 6 bytes by writing System.Console.ReadLIne directly and drop the using-Statement.
raznagul
A while loop would be the same number of bytes, but methinks a more idiomatic way of writing the code than a for loop.
Cody Gray
you can save 24 bytes by writing it as a lambda in the form () => {}
Ceshion
or alternatively, 7 by making it an instance method
Ceshion
4

QBasic 4.5, 15 bytes

INPUT a$:IF a$=""THEN RUN

Asks for input, then checks if any was given. If not, RUN restarts the program.

steenbergh
fonte
2
Didn't know about the RUN. +1. (That rhymes too; RUN and PLUS ONE :) )
Arjun
4

Ruby, 13 bytes

gets until/./

I wish gets took a Regexp argument.

histocrat
fonte
4

R, 27 24 23 22 bytes

while(!sum(scan()^0))t

Takes 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 {} with t to save another byte.

rturnbull
fonte
I think you can omit the ,'', since neither input (string or numeric) nor way of terminating was specified in the challenge.
JAD
@JarkoDubbeldam: good catch! I didn't realize errors were a valid termination.
rturnbull
would while(!sum(scan()^0)){} work as well?
MickyT
@MickyT Seems to work. Apparently even Inf^0 is 1. Nice catch with the sum(). Too bad the ^0 is need to handle 0 as input.
JAD
@MickyT That's a great find with the use of sum, thanks! I've updated the answer.
rturnbull
3

PHP, 18 bytes

while(!readline())
Skynet
fonte
Does it check that the line of text is not empty?
Daniel Earwicker
1
Yes, as soon as the line is not empty readline() returns something else than an empty string. Non empty strings evaluate to true 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.
Skynet
3

AWK, 8 11 bytes

NF{exit}

Wait 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!

Maxim Mikhaylov
fonte
Actually, you could replace NF with 1. Then you don't need to set IFS. And grumble you beat me to and AWK solution.
Robert Benson
1
@RobertBenson I tried replacing NF with 1. In that case the program exits given any input, including empty newline.
Maxim Mikhaylov
I missed that part of the spec.
Robert Benson
3

SpecBAS - 34 bytes

1 DO : INPUT a$: LOOP UNTIL a$<>""

Just loops until non-empty string is entered.

Brian
fonte
3

Mathematica, 26 20 bytes

For[,Input[]==Null,]
A Simmons
fonte
1
Shave off six bytes with For[,Input[]==Null,]. Works just as well.
Kelly Lowder
3

Haskell, 19 17 bytes

f=do""<-getLine;f

Defines 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!

nimi
fonte
Didn't think Haskell IO code could be as short as this!
Geeky I
17 bytes: f=do""<-getLine;f
Laikoni
@Laikoni: boa captura. Obrigado!
Nimi 5/05
3

Aceto , 9 5 4 bytes

rLeia um valor, negue-o ( !; convertendo implicitamente em um booleano) e espelhe horizontalmente se o valor for verdadeiro ( |).

!
r|
L3viathan
fonte
Espere, Aceto corre ** até **‽ E dizem APL é estranho para a execução da direita para a esquerda ...
Adám
3
@ Adám Aceto corre ao longo de uma curva 2D de Hilbert.
L3viathan
3

Java, 66 64 60 bytes

int a(){return!System.console().readLine().isEmpty()?0:a();}

My first Java answer, would love some tips!

OldBunny2800
fonte
Você provavelmente pode remover o espaço entre returne !. .equals("")== .isEmpty(). Você pode retornar int em vez de String. OTOH, retorno nulo, mas um while(System...)ou outroif(System...)a();
Justin #:
você pode fazer int a(){..?0:a();}, salva 3 bytes
Khaled.K
@ Khaled.K na verdade 4!
OldBunny2800
Para @ Justin e Khaled.K, obrigado pelo seu conselho!
OldBunny2800
2

Braingolf , 8 bytes [não concorrente]

1[{?:+|]

Não competir porque { , que lê as informações de STDIN, foi adicionado ao braingolf após a data de publicação deste desafio.

Explicação:

1         Pushes 1 to the stack
 [        Begins while loop
  {       Reads from STDIN, returns -1 if no input given
   ?      Checks if last item in stack is > 0
    :     Else
     +    Adds the last 2 items together, however there is only 1 item, so add it to itself
      |   Endif
       ]  End While, decrement first item in stack, or exit if first item is 0
Skidsdev
fonte
Haha, você implementou a entrada uma hora após o lançamento do desafio
somente ASCII
@ ASCII-só tinha de fazê-lo, eventualmente, haha
Skidsdev
2

Carvão , 4 bytes

W¬Sω

Explicação

W      While
  ¬S   Logical not of string input
     ω  Print ""
Somente ASCII
fonte
2

05AB1E , 5 bytes

[IõÊ#

Explicação:

[     Start infinite loop
 I    One line of input
   Ê  Not equal to
  õ   Empty string
    # Break if true

Experimente online!

Okx
fonte
Estes são 5 pontos de código Unicode, não 5 bytes; são 7 bytes em UTF-8, 10 bytes em UTF-16 ou 20 bytes em UTF-32.
Matteo Italia
O @MatteoItalia 05AB1E usa sua própria codificação , portanto, cada um desses caracteres tem 1 byte.
Okx
Desculpe, estou corrigido!
Matteo Italia
2

PowerShell, 20 bytes

for(;!(read-host)){}

executa um loop for,

read-host solicita entrada

se o host de leitura não retornar nada que pareça falso, então invertemos isso !(...) e o usamos como verificação de final do loop.

muito menor do que qualquer do{$a=read-host}while($a-eq"")solução de tipo envolvendo variáveis.

colsw
fonte
2

Rápido, 22 bytes

while readLine()==""{}
Caleb Kleveter
fonte
2

CJam , 5 bytes

{l!}g

Experimente online! (O TIO realmente não mostra o comportamento adequado)

Explicação

{      e# Do:
 l     e#  Read next line of input
  !    e#  Boolean negate (empty strings are falsy)
   }g  e# Pop the top of stack, if truthy, repeat.
Gato de negócios
fonte