0

有一个小程序可以根据提示接收用户的输入。它从用户那里获取预定义的输入并执行它们。

它还显示一个数字,提示符指示命令的计数:

myprompt 1) usercommand1
...
myprompt 2) usercommand2
...
...
myprompt 3)

我不希望用户一次给出超过 65535 个命令,因此将count其存储为unsigned short数据。

问题:

当用户实际超过命令数量的限制时,我不确定程序应该如何处理这种情况。我应该让计数翻转到 0(并继续循环)还是保持在 65535?

我希望程序仍能正常运行,就像接受用户输入并像以前一样处理它们。此外,count 的值对命令执行完全没有影响。

4

3 回答 3

3

我看起来你正在解决一个可能永远不会发生的问题。

假设您的用户速度非常快,输入命令行需要 10 秒。翻转将在 655350 秒后发生,即大约七天半

让计数器翻转。如果这仍然困扰您,那么请走高路并使其成为unsigned long. 然后它只会在 1361后翻转(在 32 位机器上)。

于 2011-02-06T08:23:41.757 回答
2

如果你问自己这个问题,这意味着你应该走简单的路:将计数器设为unsigned int.

如何处理限制很大程度上取决于此计数器的用途。我的感觉是它没有用于任何真正有趣的事情,所以你的问题有点没有实际意义。无论您做出何种选择,它仍然可以正常工作。

另一方面,如果此计数器作为某些实际用途,您应该询问此计数器的用户正确的操作方式:两者都有一些优点和缺点(计数器会及时返回或停止),因此您的用户可能会感到惊讶。

您忘记提及其他选择:终止您的程序。或者删除限制并使用某种形式的大整数(例如 GMP lib),但这听起来有点矫枉过正。

请注意,DNS 选择在 2^32 处环绕序列号。这使它永远可用。计数器的用户应该检测到溢出。RFC 1982

于 2011-02-06T08:22:06.460 回答
1

老实说这个:

我希望程序仍能正常运行,就像接受用户输入并像以前一样处理它们。此外,count 的值对命令执行完全没有影响。

回答你自己的问题,如果它根本没有效果,那么让它再次从 0 开始。

于 2011-02-06T09:06:44.827 回答