我想为我的程序找到一个解决方案,以便在有限的时间内读取用户的键盘输入。
例如,我想等待键盘输入5秒钟,经过5秒后,程序将继续输入或不输入(如果输入,它将立即继续)
我在C ++上发现了一些stackoverflow问题,但是,我找不到任何解决这个问题的解决方案。
这些是C ++问题: 1 - C++ How to wait for keyboard input for a limited time 2 - How to use a timer in C++ to force input within a given time?
由于我不太了解fortran,我不喜欢使用任何其他第三方库,但是如果你可以指导我,我也可以试试。
提前感谢您的回复。
答案 0 :(得分:2)
Fortran主要用于批量数值计算,正如Steve Lionel所指出的,该语言没有支持这种交互式使用的功能。让我提几点建议:
这是获取用户输入的传统方法,每个Fortran教科书前面都有示例代码。好处是它实施起来很简单;缺点是代码有效地挂起,直到用户响应。实际上,代码阻塞,等待用户输入; Fortran中没有信号或线程系统在经过一段时间后继续进行。在unix系统上,我在Perl中使用SIGALRM和信号处理程序来实现超时,但该技术特定于POSIXy系统,并且是可以用OS库做的一个例子,正如Steve Lionel所说。
我认为这是你试图解决的问题。
假设用户知道您的软件如何工作,并了解如何通过命令行或输入文件指定输入。 Fortran Wiki显示了一些您可以直接使用的command-line processors。否则,它们是使用(现代)Fortran 2003内在函数get_command_argument和command_argument_count的良好示例代码。
对于扩展输入,您可能希望使用某种形式的输入文件。不幸的是,实际上没有标准的Fortran库来帮助解决这个古老的问题;比较(例如)Python使用标准库读取JSON的能力,这消除了发明又一个破碎,专有,不可分割,垃圾输入文件格式(YABPUGIFF)的需要。这是典型的example。欢迎使用用户界面地狱。
根据我的经验,发明糟糕的输入文件格式并维护同样糟糕的解析器大约是Fortran编程的75%。有third-party libraries在Fortran中读写INI,CSV,JSON,XML,等。。我建议你在发明自己糟糕的输入格式之前先调查一下。
对于一般编程,请了解命令行界面(如GNU long options)的操作系统标准以及常见选项(如-v
和--verbose
)以获取详细输出{{1 }},-h
和--help
获取帮助,/?
用于显示使用信息,等。
许多语言通过标准模块ISO_C_BINDING
与Fortran进行了相当好的互操作。我和Lua有很好的结果,但是C和Python也很好用。
如果您不需要深入访问代码的内部,您可以通过用Python,等编写的包装程序读取输入。,然后为您创建适当的命令行或输入文件Fortran应用程序,然后发出--usage
或system()
调用以实际运行您的代码。我使用Python的exec()
或subprocess
库来生成和观察Windows或Linux下的Fortran可执行文件,并使用Jinja2 template system生成Fortran代码的输入,尽管任何流行的面向Web的模板框架同样适用。
我最大的建议是不要重新发明轮子;其他人在几十年前对此进行了整理,遵循社区标准,即使它们并不完美,并继续编写有趣的代码。