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.


é 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 .


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

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.


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.


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.


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.


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



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.


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.


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

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!


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.


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.


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.


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.


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())

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!


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.


3

Mathematica, 26 20 bytes

For[,Input[]==Null,]

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!


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|

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!


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

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

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.



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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.