用球拍做输入的最佳方式?

Cam*_*Cam 7 scheme racket

在球拍中从stdin读取输入的最佳方法是什么?

特别是我喜欢cin来自c ++或scanfc的东西,其中我指定了我想要阅读的东西的类型并返回它们.

Joh*_*nts 8

你可以做几乎所有你想要的......在低级别,我建议(读取线)和(读取字节).对于更高级别的处理(例如scanf),我建议在输入上进行正则表达式匹配.例如

(regexp-match #px" *([0-9]+)" (current-input-port))
Run Code Online (Sandbox Code Playgroud)


KIM*_*oon 7

read-line简单.要在Unix和Windows之间移植,需要额外的选项.

(read-line (current-input-port) 'any)
Run Code Online (Sandbox Code Playgroud)

在文本模式下读取文件时自动执行的转换后,将检测返回和换行符.例如,在Windows上以文本模式读取文件会自动将返回换行组合更改为换行符.因此,当在文本模式下打开文件时,'换行通常是适当的读取线模式.

因此,当输入端口不是文件(标准输入)时,任何都需要是可移植的.

测试程序:

#lang racket
(let loop ()
    (display "Input: ")
    (define a (read-line (current-input-port) 'any))
    (printf "input: ~a, length: ~a, last character: ~a\n"
        a
        (string-length a)
        (char->integer (string-ref a (- (string-length a) 1))))
    (loop))
Run Code Online (Sandbox Code Playgroud)

在Windows中,替换(read-line (current-input-port) 'any)(read-line),看看会发生什么.

  • 实际上,“read-line”应该可以跨 Unix 和 Windows 移植,而无需设置不同的选项(在文档中进一步提到)。 (2认同)