Scheme(DrRacket) - 读取线在第二次尝试时不会停止输入

时间:2017-11-14 09:51:06

标签: functional-programming scheme racket

我提示用户将2个值存储在2个不同的变量中,如下所示:

(define (promptUser)
  (define varA 'a)
  (define varB 0)

  (display "Value or hit q/Q to terminate: ") 
  (set! varA  (read-line))

  (cond
       ((or (string=? varA  "q") (string=? varA  "Q")))
       (else
           (display "Value for b: ")
           (set! varB (read))
           (promptUser)
       )
   )  
)

正如您所看到的,当我第一次呼叫(promptUser)时,它实际上会在(read-line)停止等待用户输入,但由于某种原因,(promptUser)处的呼叫实际上会跳过对于第一个用户输入并直接跳转到else

下的cond案例

错误示例如下: enter image description here

它不会因varA的输入而停止。

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

有一些问题:

(set! varB (read))

当在drracket中进行测试时,'read'会获得所有内容,直到分隔符,即空格或新行。我猜可以在下一个循环中使用新行char:

(set! varA  (read-line))

当您在B中输入例如:'aaa bbb'并且在下一个循环中显示varA的内容时,可以看到这一点。 bbb会在那里。 如果用读线替换读数,

(set! varB (read-line))

一切都按预期工作。

相关问题