2011-07-18 4 views
10

私はPythonのバックグラウンドから来ているC++の新人です。どのデータ型であるかを知る前に変数を宣言する方法は?

ユーザーからの入力が必要な場合、入力がどのデータ型(整数や浮動小数点数など)であるかを確認するには、ユーザーの入力を割り当てる変数をどのように宣言できますか?

+0

おそらく必要なのは単なる浮動小数点または二重であると思います。整数だけでなく小数値も保持できます。 –

答えて

22

短い答え:それはできません。

長い答え:できません。 C++は静的型言語です。つまり、コンパイル時に型を定義する必要があります。 Pythonは動的に型付けされているので、オブジェクトのタイプは行ごとに変更できます。

ただし、ユーザーからの入力を取得したい場合は、文字列を使用することもできます。例えば

、ユーザーからの整数の入力を取得したい場合:

int n; 
std::cin >> n; 

フロート入力:

float x; 
std::cin >> x; 

などがあります。この2つのケースでは、ユーザが整数または浮動小数点以外の何かを入力した場合、std :: cinのフラグをチェックしてエラーがあるかどうかを確認する必要があります。

しかし、ユーザーに "今すぐ入力整数"または "入力浮動小数点入力"を伝える必要があります。任意のタイプを受け入れることはできません。代わりに、整数または浮動小数点入力の代替コードパスを持つようにコードを設計します。または、一方または他方を強制し、間違ったタイプの入力をしたときにエラーを出力します。

Pythonのようにコードを記述しないでください。慣習的なPythonコードはイディオム的なC++コードではありません。あなたが物事を成し遂げる方法は同じには見えません。

std::string input; 
std::cin >> input; 

if (IsInteger(input)) 
{ 
    // do stuff with integer 
} 

else if (IsFloat(input)) 
{ 
    // do stuff with float 
} 

else 
{ 
    std::cout << "Bad Input!" << std::endl; 
} 

編集:MSaltersコメントで指摘したように、あなたが実際にいくつかのタイプT(に文字列表現をキャストするboost::lexical_cast<T>(expr)を使用することができますCで

は、任意の入力を取得する方法は次のようになり++しますTは通常int、float、doubleなどのようなものです)。注意してください。おそらく、exprが実際に整数、浮動小数点数などであるかどうかを調べるために何らかのチェックを行う必要があります。

+1

+1慣用のPythonコードはイディオム的なC++コードではありません – Mark

5

ユーザーからの入力を受け取ると、stringとして届きます。たとえば:

std::string inp; 
std::cin >> inp; 

はその後、あなたは、(ユーザーが入力したものは何でもある)inpの内容を取り、それが含まれているものを文字見て、その中に見えます。その時点で、(a)すべての数字、(b)数字および小数点、または(c)完全に他のものが含まれているかどうかに基づいて決定できます。

+0

かなりのロケールでは小数点の区切り記号として '、'を使用します。他の人はそれを桁区切り文字として使用します。国際化は難しい。 –

+2

'boost :: lexical_cast (inp)'は現在のロケールを使用します。それほど難しいことではありません。本当に難しいのは、それらを混ぜている現実のユーザーを扱うことです。 – MSalters

3

ユーザーから文字列を収集して解析するほうがはるかに優れています。

この質問の答えを探すための場所です: How to parse an int from a string

1

C++は静的型付けされた言語です。コンパイル時にはすべての変数型を知っていなければなりません。

1

Pythonは動的に型付けされた言語であり、逆にc/C++は静的型付けされた言語です。型を見つけて実行時に宣言することはできません。

関連する問題