0

プロンプトでユーザーからの入力を受け取る小さなプログラムがあります。ユーザーから事前定義された入力を受け取り、それらを実行します。

また、コマンドの数を示すプロンプトとともに数値が表示されます。

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

ユーザーが一度に65535を超えるコマンドを指定することはないと思います。そのため、countunsigned shortデータとして保存されます。

問題:

ユーザーが実際にこのコマンド数の制限を超えた場合に、プログラムがこのケースをどのように処理する必要があるのか​​わかりません。カウントを0にロールオーバーする(そしてループを続ける)か、65535のままにする必要がありますか?

ユーザー入力を受け取り、以前と同じように処理する場合のように、プログラムを引き続き正常に機能させたいと思います。また、countの値は、コマンドの実行にはまったく影響しません。

4

3 に答える 3

3

決して起こらないかもしれない問題に取り組んでいるようです。

ユーザーが非常に高速で、コマンドラインを入力するのに10秒かかると仮定しましょう。ロールオーバーは655350秒後、つまり約7日半後に発生します。

カウンターをロールオーバーさせます。それでも問題が解決しない場合は、ハイパスを選択してください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 に答える