Nhấn mạnh vào một câu trả lời


31

Trong thời gian chạy, tiếp tục nhắc về một dòng đầu vào cho đến khi người dùng nhập một cái gì đó (không phải là một dòng mới trống), tức là không chỉ nhấn Enterhoặc OK. Đầu ra hoặc kết quả là không bắt buộc cũng không bị cấm.

Mã giả 1

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

Mã giả 2

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

ví dụ 1

Chương trình chạy và ngay lập tức bật lên một biểu mẫu với một trường văn bản và một OKnút.
Người dùng nhấp vào OKnút.
Chẳng có gì xảy ra.
Người dùng dán "hello world" vào trường văn bản và nhấp vào OKnút.
Chương trình chấm dứt.

Ví dụ 2

Chức năng được gọi và ngay lập tức hiển thị một dòng trống và một con trỏ nhấp nháy.
Người dùng nhấn Enter.
Con trỏ di chuyển xuống một dòng.
Người dùng nhấn Enter.
Con trỏ di chuyển xuống một dòng.
Người dùng nhấn PPCGEnter
Hàm trả về.


Có được phép đếm các dòng chỉ có không gian là trống không?
12431234123412341234123

@ 12431234123412341234123 Số
Adám

Có nhất thiết phải đợi dòng đầy đủ khi người dùng bắt đầu nhập dữ liệu không?
Matteo Italia

Ok, từ một bình luận trong câu trả lời đã bị xóa của @ CodyGray, có vẻ như nó không được phép.
Matteo Italia

@MatteoItalia Vâng, đúng; một dòng đầu vào .
Adám

Câu trả lời:


16

TI-BASIC, 2 byte

:Prompt X

TI-BASIC thực hiện điều này tự động. Một khi đầu vào được đưa ra, nó sẽ thoát.

Đây là một GIF:

nhập mô tả hình ảnh ở đây

Xem số đếm trên enterphím trong Lịch sử báo chí chính. Được tạo bằng TI-SmartView CEezgif.com .


1
Hmm .. đây là 2 byte?
Geeky tôi


Và nó sẽ không mất Enter cho một câu trả lời? Có nơi nào để kiểm tra trực tuyến này?
Adám

@ Adám Sẽ không nhận được câu trả lời. Theo như tôi biết, không có nơi nào bạn có thể truy cập trực tuyến mà không có hình ảnh TI ROM. Tôi có thể đăng một .gif khi tôi về nhà, mặc dù.
Scott Milner

1
@ Adám Việc kiểm tra TI-BASIC trực tuyến mà không sở hữu ROM là bất hợp pháp.
Erik the Outgolfer



15

JavaScript, 37 22 17 byte

while(!prompt());

while(!prompt());

Giải trình

Các whiletừ khóa bắt đầu whilevòng lặp. Trong điều kiện của vòng lặp, !prompt()yêu cầu đầu vào và kiểm tra xem nó có được đưa ra hay không. Nếu nó không được đưa ra, phần thân của vòng lặp được thực thi, trong trường hợp của chúng ta là rỗng, thì trình thông dịch sẽ quay trở lại điều kiện vòng lặp. Quá trình tương tự xảy ra lặp đi lặp lại cho đến khi người dùng đưa ra đầu vào.


while(""==prompt(""));
Adám

@ Adám Wow. Tôi chỉ nghĩ về cách làm cho giải pháp nhỏ hơn, và bạn đã đưa ra một câu trả lời cảm ơn!
Arjun

Nó có vẻ rõ ràng. Tuy nhiên, bảng điều khiển trình duyệt của tôi từ chối thực thi mà không có dấu vết ;, trong khi biểu thức ban đầu của bạn hoạt động tốt mà không có ;. Bất cứ ý tưởng tại sao?
Adám

Không, Chrome. Vì vậy, nếu bất kỳ công cụ JavaScript nào có thể xử lý thiếu sót của biểu thức hiện tại ;, bạn có thể lưu byte đó :-)
Adám

1
@ Adám Chỉ cần tìm ra nguyên nhân thực sự của lỗi được tạo ra sau khi xóa dấu chấm phẩy khỏi mã nguồn. Lý do tại sao điều đó xảy ra là trong khi vòng lặp mong đợi một câu lệnh (hoặc một nhóm các câu lệnh) là thân vòng lặp sau điều kiện vòng lặp. Thêm dấu chấm phẩy làm cho nó nghĩ rằng cơ thể vòng lặp đã kết thúc. Tuy nhiên, việc loại bỏ dấu chấm phẩy khiến nó mong đợi câu lệnh tiếp theo là phần thân vòng lặp. Nhưng trong trường hợp của chúng tôi, không có tuyên bố mới nào xuất hiện sau điều kiện vòng lặp. Vì vậy, nó ném một lỗi. Tôi hy vọng nó là rõ ràng bây giờ. Tôi thật kinh khủng khi giải thích mọi thứ !! : p
Arjun

9

Java, 55 byte

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

Nếu tôi nhớ chính xác (đã được một thời gian kể từ khi tôi hoạt động trên PPCG), chương trình của tôi chỉ có thể là một chức năng.

Đây là hệ thống cụ thể; nó chỉ hoạt động trên các hệ thống mà ký tự cuối dòng là một dòng mới. Nếu ký tự cuối dòng thay vì trả về xe ngựa, hãy thay thế 10bằng 13. Trên Windows, điều này không hoạt động, vì dòng cuối cùng trên windows là \r\n.

Điều này làm cho việc sử dụng thực tế mà tôi có thể đọc trực tiếp từ System.in.


2
Chào mừng trở lại, nếu chỉ cho câu trả lời này! : D
Conor O'Brien

3
Chào mừng trở lại @Justin!
Chấn thương kỹ thuật số

1
Không có kế hoạch hoạt động; chỉ ghé qua một câu hỏi ở đây và ở đó
Justin

Để tránh sự cố "không hoạt động trên Windows", bạn không thể kiểm tra ký tự đầu tiên và xem liệu nó có \rtrái ngược với việc kiểm tra toàn bộ chuỗi không, sau đó gặp sự cố khi có 2 ký tự EOL?
Cody Grey

@CodyGray Không. Tôi đang đọc 1 char mỗi lần; đó là tất cả những System.ingì bạn làm trực tiếp (tốt, bạn sẽ đọc một loạt các ký tự một lần). Cơ thể vòng lặp của tôi (trống) được chạy cho mọi char trong đầu vào
Justin

9

HTML5, 33 22 byte

<form><input required>

<form><input required>

Giải trình

Các requiredthuộc tính trên <input>làm cho trình duyệt để thông báo cho người dùng "lĩnh vực này là cần thiết" -Phân loại file-of-tin nhắn, nếu họ không nhập một giá trị. Tuy nhiên, khi họ nhập một giá trị, giá trị được gửi đến URL của actionthuộc tính của<form> (trong trường hợp của chúng tôi là chính tệp hiện tại, vì chúng tôi chưa chỉ định rõ ràng bất kỳ giá trị nào).

Điều này đã được thử nghiệm trên phiên bản Google Chrome mới nhất (phiên bản 55.0). Có thể làm việc trong các trình duyệt và phiên bản khác.


action=/có thể hoạt động trên một số trình duyệt.
Neil

1
Bạn có thể bỏ actionhoàn toàn thuộc tính.
Xù xì

1
@Arjun Điều action=y.pnày là không cần thiết, vì hầu hết các Đại lý Người dùng sẽ gửi đến cùng một vị trí nếu không có actionthông tin cụ thể
MayorMonty

@Arjun Tôi đã thử <form><input required>trên phiên bản Google Chrome mới nhất và hoạt động như dự định. Và nếu bạn nghi ngờ, chỉ cần sử dụng action=#. Điều đó tiết kiệm 2 byte.
Ismael Miguel

3
@Arjun Đó là một ý tưởng khủng khiếp cho việc chơi golf code. Tôi không thể nói về mọi trình duyệt, vì tôi không sở hữu bất kỳ Android 1.0, 1.6, 2.0, 2.1, 3.0, 3.1, 4.xx, 5.x, 6.x, ..., iPhone 2 - 7, mỗi bản phát hành Google Chrome, Firefox 3.0+ trở đi và trên và trên và trên ... Trên thực tế, không phải tất cả các trình duyệt HTML5 đều thực hiện requiredthuộc tính! Ngoài ra, #là một đường dẫn có sẵn kể từ HTML 1.0, nếu tôi đúng. Và thêm không actionvào biểu mẫu của bạn cũng giống như action=".", chính tệp đó.
Ismael Miguel

8

Thạch , 3 byte

ɠṆ¿

Không có nhiều thứ để xem trên TIO, tôi sợ.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Đây là một chương trình niladic, có nghĩa là nó không có đối số đầu vào. Đối số ngầm và giá trị trả về đều bằng 0 trong trường hợp này.

¿(while) là một cách nhanh chóng xuất hiện hai liên kết từ ngăn xếp liên kết: một điều kiện ( ) và một cơ thể.

là một nguyên tử đơn nguyên: logic phẳng KHÔNG. Nếu giá trị trả về trước đó là sai (ở đây, 0 hoặc một chuỗi rỗng), nó trả về 1 và phần thân được gọi.

ɠlà một nguyên tử niladic; nó đọc một dòng thô từ STDIN và trả về kết quả.

Khi ɠđọc một dòng không trống, trả về 0 và chúng ta thoát ra khỏi vòng lặp.


Nhanh quá hả? À, tốt.
Adám



5

Perl 5, 8 + 1 (cờ -p hoặc -n) byte

/./&&die

Mất đầu vào từ stdin và chết ngay khi regex khớp với bất cứ thứ gì ngoại trừ một dòng mới.


5

C, 52 byte , 33 byte , 29 byte

-19 byte nhờ Justin

-4 byte nhờ Christoph

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

10 bằng với '\ n' - Trong trường hợp điều này không rõ ràng.


1
Bạn có thể đánh gôn bằng 1 char bằng cách sử dụng ;thay vì {}vòng lặp for
Justin

1
Mặc dù không tuân thủ tiêu chuẩn, bạn có thể xóa #include<stdio.h>nếu bạn chuyển sang while(getchar()==10): int main(){while(getchar()==10);}.
Justin

2
@Justin main(){while(getchar()==10);}là đủ không cần int mặc định.
Christoph

1
main(){scanf("%s");}cũng sẽ hoạt động, nếu các dòng chỉ có không gian có thể được tính là trống.
12431234123412341234123

1
@DanielEarwicker Bạn nói đúng. Điều đó dường như không rõ ràng với tôi khi tôi đọc câu hỏi lần đầu tiên, nhưng bây giờ tôi thấy những gì bạn đang nói. Trong trường hợp đó, có nhiều câu trả lời không phù hợp cho câu hỏi này.
Justin

5

Bash, 51 byte (39 không có "#! / Bin / bash")

Đây là lần đầu tiên tôi tham gia PPCG, vì vậy đừng thô lỗ; D

#!/bin/bash
read a
while [ -z "$a" ]
do
read a
done

1
Chào mừng đến với PPCG.
Adám

3
Chào mừng bạn đến với PPCG!, Nếu bạn dự định sử dụng Bash làm ngôn ngữ chơi gôn, bạn có thể thấy Bài đăng này thú vị, nó có rất nhiều mẹo để tạo các chương trình bash nhỏ nhất có thể, còn có Phiên bản tổng quát hơn mà bạn có thể muốn lướt qua quá.
colsw

@ConnorLSW Wow, cảm ơn, bài viết đó sẽ giúp tôi rất nhiều. Tôi sẽ cố gắng chỉnh sửa Câu trả lời của mình với mẹo mới này càng sớm càng tốt.
Nicolas Fischer

4
bạn không cần #!/bin/bash
12431234123412341234123

Vâng, đây cũng là lần đầu tiên đối với tôi :) Nhưng có lẽ bạn có thể sử dụng đệ quy: [ -z `line` ] && $0hoặc nếu không dùng nữa linetrên hệ thống của bạn : [ -z `head -n1` ] && $0. Đó phải là 20 hoặc 24 byte.
Yeti

4

Java , 128 126 byte

2 byte nhờ Kevin Cruijssen.

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

Hãy thử trực tuyến!


1
Bạn có thể đánh gôn bằng hai byte: Thay đổi whilethành a forvà đặt Scanner s=new Scanner(System.in);bên trong nó. Và thay đổi .equals("")thành .isEmpty().
Kevin Cruijssen

Tôi khá chắc chắn rằng bạn có thể loại bỏ việc nhập nếu bạn sử dụng máy quét; khá chắc chắn rò rỉ một máy quét hoạt động tốt:while(new java.util.Scanner(System.in).nextLine().isEmpty());
Justin

4

C # (.NET Core) , 66 byte

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

Hãy thử trực tuyến!

-6 byte nhờ raznagul.


1
Bạn có thể lưu 6 byte bằng cách viết System.Console.ReadLInetrực tiếp và thả using-Statement.
raznagul

Một whilevòng lặp sẽ có cùng số byte, nhưng tạo ra một cách viết mã đơn giản hơn một forvòng lặp.
Cody Grey

bạn có thể lưu 24 byte bằng cách viết nó dưới dạng lambda dưới dạng () => {}
Ceshion

hoặc cách khác, 7 bằng cách biến nó thành một phương thức cá thể
Ceshion

4

QBasic 4,5, 15 byte

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

Yêu cầu đầu vào, sau đó kiểm tra nếu có. Nếu không, RUNkhởi động lại chương trình.


2
Không biết về RUN. +1. (Cũng có vần điệu; CHẠY và CỘNG MỘT :))
Arjun

4

Ruby, 13 byte

gets until/./

Tôi muốn getscó một đối số Regapi.


4

R, 27 24 23 22 byte

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

Lấy đầu vào từ stdin và lặp lại miễn là đầu vào có độ dài 0. Cắt bỏ một số byte do Jarko Dubbeldam và MickyT. Thay thế {}bằng tđể lưu một byte khác.


Tôi nghĩ bạn có thể bỏ qua ,'', vì cả đầu vào (chuỗi hoặc số) cũng như cách kết thúc không được chỉ định trong thử thách.
JAD

@JarkoDubbeldam: bắt tốt! Tôi đã không nhận ra lỗi là một chấm dứt hợp lệ.
rturnbull

sẽ while(!sum(scan()^0)){}làm việc như thế nào?
MickyT

@MickyT Có vẻ như để làm việc. Rõ ràng ngay cả Inf ^ 0 là 1. Bắt tốt với sum(). Quá xấu ^0là cần phải xử lý 0như đầu vào.
JAD

@MickyT Đó là một phát hiện tuyệt vời với việc sử dụng sum, cảm ơn! Tôi đã cập nhật câu trả lời.
rturnbull

3

PHP, 18 byte

while(!readline())

Nó có kiểm tra xem dòng văn bản không trống không?
Daniel Earwicker

1
Có, ngay khi dòng không trống readline()sẽ trả về một cái gì đó ngoài một chuỗi trống. Các chuỗi không rỗng đánh giá truetrong php - ít nhất là hầu hết chúng làm. "0" dường như là một ngoại lệ khi tôi vừa đọc tài liệu. Vâng, tôi đoán câu trả lời của tôi là sai bây giờ.
Skynet

3

AWK , 8 11 byte

NF{exit}

Đợi đầu vào. Nếu số lượng trường trong đầu vào nhiều hơn 0, hãy thoát.

CHỈNH SỬA:

Tôi mới nhận ra rằng điều này không hoạt động đối với đầu vào chỉ chứa các ký tự khoảng trắng. IFS cần được đặt thành chuỗi rỗng bằng -F ""tùy chọn dòng lệnh. Do đó +3 byte.

Hãy thử trực tuyến!


Trên thực tế, bạn có thể thay thế NFbằng 1. Sau đó, bạn không cần phải thiết lập IFS. Và càu nhàu bạn đánh tôi và AWKgiải pháp.
Robert Benson

1
@RobertBenson Tôi đã thử thay thế NFbằng 1. Trong trường hợp đó, chương trình thoát khỏi bất kỳ đầu vào nào , bao gồm cả dòng mới trống.
Maxim Mikhaylov

Tôi đã bỏ lỡ một phần của thông số kỹ thuật.
Robert Benson

3

SpecBAS - 34 byte

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

Chỉ cần vòng lặp cho đến khi chuỗi không trống được nhập vào.


3

Toán học, 26 20 byte

For[,Input[]==Null,]

1
Cạo sạch sáu byte với For[,Input[]==Null,]. Hoạt động tốt như là tốt.
Kelly Lowder

3

Haskell, 19 17 byte

f=do""<-getLine;f

Xác định hàm f mà nếu nó đọc dòng trống sẽ gọi lại chính nó. Khi đọc một dòng không trống, một ngoại lệ được đưa ra và đệ quy được dừng lại.

Chỉnh sửa: @Laikoni thay thế tham số bằng khớp mẫu và lưu 2 byte. Cảm ơn!


Đừng nghĩ mã IO của Haskell có thể ngắn như thế này!
Geeky tôi

17 byte:f=do""<-getLine;f
Laikoni

@Laikoni: bắt đẹp. Cảm ơn!
nimi

3

Aceto , 9 5 4 byte

read một giá trị, phủ nhận nó ( !; ngầm định chuyển sang boolean) và phản chiếu theo chiều ngang nếu giá trị là trung thực ( |).

!
r|

Đợi đã, Aceto chạy ** lên ** Và họ nói APL thật lạ khi chạy từ phải sang trái
Adám

3
@ Adám Aceto chạy dọc theo đường cong 2D Hilbert.
L3viathan

3

Java, 66 64 60 byte

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

Câu trả lời Java đầu tiên của tôi, sẽ thích một số mẹo!


Bạn có thể có thể loại bỏ không gian giữa return!. .equals("")== .isEmpty(). Bạn có thể trả về int thay vì String. OTOH, trả lại khoảng trống nhưng while(System...)hoặcif(System...)a();
Justin

bạn có thể làm int a(){..?0:a();}, tiết kiệm 3 byte
Khaled.K

@ Khaled.K thực sự 4!
OldBunny2800

Gửi @Justin và Khaled.K, cảm ơn lời khuyên của bạn!
OldBunny2800

2

Braingolf , 8 byte [không cạnh tranh]

1[{?:+|]

Không cạnh tranh vì { , đọc đầu vào từ STDIN, đã được thêm vào braingolf sau ngày đăng bài của thử thách này.

Giải trình:

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, bạn đã triển khai đầu vào một giờ sau khi thử thách được đăng
ASCII - chỉ

@ ASCII - cuối cùng chỉ phải làm điều đó, haha
Skidsdev

2

Than , 4 byte

W¬Sω

Giải trình

W      While
  ¬S   Logical not of string input
     ω  Print ""


2

PowerShell, 20 byte

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

chạy một vòng lặp,

read-host lời nhắc cho đầu vào

nếu máy chủ đọc trả về không có gì nó sai thành sai, vì vậy chúng tôi đảo ngược điều đó !(...) và sử dụng nó làm kiểm tra kết thúc vòng lặp.

ngắn hơn nhiều so với bất kỳ do{$a=read-host}while($a-eq"")giải pháp loại liên quan đến các biến.



2

CJam , 5 byte

{l!}g

Hãy thử trực tuyến! (TIO không thực sự thể hiện hành vi đúng đắn)

Giải trình

{      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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.