2016-09-12 34 views
4

これはとても簡単ですが、私はいくつかの奇妙な動作をしています。ユーザー入力(std :: cinから)を文字列と比較するにはどうすればよいですか?

std::cout << "Would you like to generate a complexity graph or calculate global complexity? (graph/global)\n"; 
char ans[6]; 
std::cin >> ans; 

if (ans != "global") std::cout << ">>" << ans << "<<" << std::endl; 

私は私のプログラムを実行して、私は入力の入力を求めていたときに、「グローバル」と入力し、プログラムが返します:

>>global<< 

私のプログラムで

は、次のコードがありますなぜif文はtrueと評価されますか?

+1

^^^または、 'char'配列の代わりに' std :: string'を使用してください。 –

答えて

2
  1. あなたはCスタイルの文字列の比較のためにstrcmpまたはstrncmpを使用する必要があります。 ans != "global"は、文字列の内容ではなく、ポインタが指すメモリアドレスを単に比較しています。

  2. char ans[6];"global"のために、あなたはヌル文字'\0'ためchar 1以上を必要とし、char ans[7];でなければなりません。

このような問題を回避するには、代わりにstd::stringを使用してください。

0

ansをcharの配列として宣言したため、if (ans != "global")の式の場合、ansは文字列の先頭を指します。したがって、明らかに等しくない2つのポインタを比較し、式が真であると評価します。

if (std::string(ans) != "global") {......} 

それともstd::stringの代わりchar[]としてansを宣言する:あなたはまだCスタイルの文字列としてansを宣言したい場合は、比較する前に、それからstd::stringを構築することができます。

+1

とC++の14個のリテラル、 'ans!="グローバル "s"が利用可能 – ikh

関連する問題