有一个小程序在提示符下从用户那里获取输入。它需要用户的预定义输入并执行它们。
它还会显示一个数字,提示指示命令的计数:
myprompt 1) usercommand1
...
myprompt 2) usercommand2
...
...
myprompt 3)
我不希望用户一次提供超过65535个命令,因此count
存储为unsigned short
数据。
问题:
当用户实际超过命令数量限制时,我不确定程序应如何处理。我应该让计数翻到0(并保持循环)还是保持在65535?
我希望程序仍然正常运行,就像接受用户输入并像以前一样处理它们一样。此外,count的值对命令执行完全没有影响。
答案 0 :(得分:3)
我看起来你正在解决一个可能永远不会发生的问题。
让我们假设您的用户非常快,输入命令行需要10秒钟。翻滚将在655350秒后发生,即大约七天半。
让柜台翻身。如果这仍然让您感到麻烦,那么请走高路并将其设为unsigned long
。然后它只会在1361年年后滚动(在32位机器上)。
答案 1 :(得分:2)
如果你问自己这个问题,这意味着你应该采取简单的方法:使计数器成为unsigned int
。
如何处理限制非常依赖于此计数器的用途。我的感觉是,它不是用于任何真正有趣的事情所以你的问题有点没有实际意义。无论你做出哪个选择,它仍然可以正常工作。
另一方面,如果这个计数器作为某些真实的使用,你应该向这个计数器的用户询问正确的方法:两者都有一些优点和缺点(计数器要么及时返回,要么停止)所以你的用户可能会感到惊讶。
您忘了提及其他选择:终止您的计划。或者删除限制并使用某种形式的大整数(例如GMP lib),但这种方法有点过分。
请注意,DNS选择将序列号环绕在2 ^ 32。这使它永远可用。计数器的用户应该检测溢出。 RFC 1982
答案 2 :(得分:1)
说实话:
我希望程序仍能正常运行 通常,如同用户输入和 像以前一样处理它们。而且, count的值根本没有影响 命令执行。
回答你自己的问题,如果它根本没有效果,那就让它再次从0开始。