0

C または C++ で、ユーザーが指定した数値が整数型の範囲外かどうかを確認する方法はありますか?

たとえば、-32768 ~ 32767 の範囲の 16 ビットの符号付き整数を使用しているとします。

ユーザーがプログラムに 55555 を入力すると、これはラップされて負の数になるため、任意の数を受け入れる関数を使用している場合、結果は正しくありません。

C または C++ で、ユーザーが指定した数値が整数型の範囲内にあるかどうかを判断する方法はありますか?


更新: 2 つの数値を受け入れ、最初の数値から 2 番目の数値を減算する単純な減算プログラムで数値を使用しています。

4

4 に答える 4

5

オーバーフローが発生した場合にstrtol設定さerrnoれるようなものを使用している場合ERANGE

于 2012-10-17T15:44:20.820 に答える
3

ユーザーがプログラムに 55555 を入力すると、これはラップされて負の数になります。

常にではない。数字の読み方次第です。たとえば、を使用するとoperator>>、その値はラップされず、拒否されます。

C または C++ で、ユーザーが指定した数値が整数型の範囲内にあるかどうかを判断する方法はありますか?

C++ では、次のように使用しますoperator>>

#include <iostream>
int main() {
  signed short int i;
  std::cin >> i;
  if(std::cin)
    std::cout << "You entered a valid number!\n";
  else
    std::cout << "Aw c'mon, play by the rules.\n";
}
于 2012-10-17T15:44:07.793 に答える
0

C または C++ で、ユーザーが指定した数値が整数型の範囲外かどうかを確認する方法はありますか?

使用している機能によって異なります(strtolたとえば、それを行うことができます)。ドキュメントを確認してください。

于 2012-10-17T15:45:23.100 に答える
0

int と uint の唯一の違いは、解釈方法です。浮動小数点引数への切り替え、値のチェック、および型キャストを検討することが非常に重要な場合、問題には解決策がありません。更新:コンソール入力ではなく、別のプログラマーから提供された実行時チェック関数の引数値が必要だと思いました。

于 2012-10-17T16:10:18.450 に答える