【问题标题】:Stop the readln() when hitting a certain key?按下某个键时停止 readln()?
【发布时间】:2014-04-26 10:53:40
【问题描述】:

好的,这个问题可能听起来模棱两可,但我确实没有其他的说法。希望解释它会帮助你们弄清楚我的意思..

我最近决定重新学习 Pascal 编程语言。几年前我做了一些Delphi,但我真的不喜欢它。不管怎样,这个背景就够了。。

我被要求做一个简单的控制台计算器。截至目前,我已经设置了整个“界面”。它不会基于位置/输入键读取值,因此我避免输入值并使用数学运算符(+、-、*、div [因为我了解到“/”不适用于除法)值之间。

我的问题是:

我正在使用控制台 readln(variable) 命令读取值。它按预期工作,但现在我想,em,玩一下它。我想知道当我按下“+、-、/、*”键时,是否有办法打破 readln() 语句。比如,我有这行:

readln(value1)

我想要做的是,我会输入任何内容,程序会将其存储在 value1 变量中,直到我按下一个操作符键(例如 +)。应该是这样的:

readnln(value1);
***break it when i hit one of the operators key, '+' for example***
readln(operator)
***break it right after i type the operator, so this would take just one char***
readln(value2)
***This one can be break with the "enter" key hit, so nothing needed here***

这有什么意义吗?我真的希望它会。

【问题讨论】:

    标签: pascal lazarus


    【解决方案1】:

    你不能(轻松地)用 readln 做到这一点,你需要自己在 read(c) 上用 c: char 来制作这个。 (或者更好,crt.readkey)

    有关该原理的精彩版本,请参阅 FPC 演示中“gameunit”中的 inputstr,用于在俄罗斯方块演示的高分中输入名称。

    另请参阅“lister”演示,该演示演示了许多小型文本模式技术。

    【讨论】:

    • 谢谢马可!我玩弄了使用 read 的想法,但它变得相当复杂。我有一种预感,这可能不像听起来那么简单。无论如何,感谢您的快速回复!很高兴知道有人理解我的意思:p。将检查您的建议,可能会发布结果。再次感谢。
    • 我对@9​​87654321@ 在 FPC 中的工作原理一无所知,但如果它与 TP/BP 中的相同,那么,如果我没记错的话,用户仍然需要在某些时候按 Enter Reads 开始实际读取输入的数据。
    • Andriy M:你是对的。我忘记了,因为我通常用它包装。
    • 哦,我以为你指的是“readkey”命令。我以前试过那个,我取得了一些进展。这是一个混乱的局面。我有一个固定长度的数组,每次输入一个键后我都会在其中插入数据。这是在一个循环中完成的,只要按下其中一个操作键就会中断。但是我在处理退格键以删除目的以及防止插入非数字字符时遇到问题)
    • 上面提到的演示确实可以处理这个问题。它们应该在 c:\fpc\\demo
    猜你喜欢
    • 2012-05-31
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    相关资源
    最近更新 更多