2017-11-14 9 views
1

私は実際には指定しないタスクを受け取りました。私の関数のどの入力範囲が期待されるべきか(唯一、常に正の整数になります)、入力は実行時に決定されます。私が選択したタイプが実際に摂取された値を保持できるかどうか、何らかの形でテストできますか?私が探しているテストされて魔法の一部(あるいは先行ライン)でstdinからの数値が与えられた型の数値の限界より小さいかどうかをチェックする方法?

char test; 
std::cin >> test; 
if(MAGIC) 
{ 
    std::cout << "Error." << std::endl; 
} 

私がやって期待しています何のイラスト。 >出力なし

標準入力 - 100::1000000 - >エラー

標準入力: それはこのように動作するはずです。

+1

関連:https://stackoverflow.com/questions/3582509/why-does-integer-overflow-cause-errors-with-c-iostreams – scohe001

答えて

3

ほとんどのデータ型では、hereのように入力ストリームのエラー状態を確認できます。ただし、std::cin >> testはデータを1文字で読み込むことができるので、達成する必要のない'1'など、他のタイプの投稿ではご利用いただけません(charなど)。

一つのアプローチはstd::stringに番号を読み取り、および制限を経て得られたmax()と比較することである。

std::string max = std::to_string(std::numeric_limits<char>::max()); 
std::string s; 
std::cin >> s; 
bool cmp = (s.size() == max.size()) ? (s <= max) : (s.size() < max.size()); 
std::cout << s << " " << cmp << std::endl; 

Demo.

注:上記のコードは、データが入力されたという仮定を行います数字であり、任意に大きくてもかまいませんが、数字以外の文字は使用できません。この仮定ができない場合は、a solution from this Q&Aを使用して入力が数値かどうかをテストします。

2

私は、あなたが番号を格納するlong int型やchar型の配列を使用することができます与えられた(答えはあなたのコードにインスピレーションを得るためにhttps://stackoverflow.com/a/9574912/7071399を参照し、その後、どこの限界を取得するために知ってhttps://stackoverflow.com/a/1855465/7071399にかもしれないと思うと、整数値に収まるかどうか確認してください)。

関連する問題