File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11# 1 输入
22
3+ 读取一个输入
34``` scheme
45 (read)
56```
67
8+ 读取一行输入,按格式标记符分配到变量中,和C++的scanf功能类似,目前支持~ s 和~ d标记
9+ ``` scheme
10+ (define h 0)
11+ (scanf "/~s:" h)
12+ ```
13+
714# 2 输出
815
916``` scheme
Original file line number Diff line number Diff line change 1+ ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2+ ; ;Copyright 2016-2080 evilbinary.
3+ ; ;作者:evilbinary on 12/24/16.
4+ ; ;邮箱:rootdebug@163.com
5+ ; ;其中 scanf 由 yupengkun 友情贡献
6+ ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7+ (library (io scanf)
8+ (export
9+ scanf)
10+ (import (scheme))
11+ (define (scanf fmt . var )
12+ (define (sf-f c str )
13+ (do ([n 0 (+ 1 n)]) ((equal? c (string-ref str n)) n)))
14+ (define c (list #\d string->number #\s eval))
15+ (set! fmt (string-append fmt " \r " ))
16+ (let foo ([i 0 ] [tar (get-line (current-input-port))])
17+ (when (<= (+ i 3 ) (string-length fmt))
18+ (let ([f (string-ref fmt i)]
19+ [m (string-ref fmt (+ i 1 ))]
20+ [l (string-ref fmt (+ i 2 ))])
21+ (cond
22+ [(and (eq? f #\~ ) (or (eq? m #\d ) (eq? m #\s )))
23+ (set! temp (+ (sf-f l tar) 1 ))
24+ (set-box!
25+ (car var)
26+ ((cadr (memv m c)) (substring tar 0 (- temp 1 ))))
27+ (set! var (cdr var))
28+ (foo (+ i 3 ) (substring tar temp (string-length tar)))]
29+ [else
30+ (foo (+ 1 i) (substring tar 1 (string-length tar)))])))))
31+ )
You can’t perform that action at this time.
0 commit comments