-4

この小さなコード セクションでは、ユーザーから入力データを収集しています。最初の入力が「0」の場合、それ以上の情報は受け付けません。「0」でない場合は、残りのデータの入力を求めます。

class Molecule {

char structure[10];
char name[20];
double weight;

public:

Molecule();
bool read();
void display() const;

};

bool Molecule::read() {


cout << "Enter structure : ";
cin >> structure;

if (structure != "0") {
cout << "Enter name : ";
cin >> name;
cout << "Enter weight : ";
cin >> weight;
}
}

これは、構造が 0 でない場合、残りの情報を求めるプロンプトを表示する必要があります。しかし、これを実行すると、0 を入力しても他の cout と cin が表示されます。

4

2 に答える 2

4

問題は、文字列値の比較を試みていますが、実際にはポインター値の比較を行っていることです。strcmp値比較のセマンティクスを取得するには、次のような関数を使用する必要があります

if (strcmp(structure, "0") != 0) {
  ...
}

あなたが書いた元のコードは、効果的に次のことを行っています

int left = structure;
int right = "0";
if (left != right) { 
  ...
}

そこではいくつかの詳細 (アーキテクチャを含む) について説明しましたが、基本的には元のサンプルが行っていることです。C/C++ には、実際には文字列値の概念がありません。文字列リテラルとそれらをchar配列に変換する方法についての理解は限られていますが、値の理解方法については理解していません。

于 2013-03-04T23:52:38.633 に答える
0

私のコメントを拡大する

使用する

#include <string>

...

std::string structure;

...
structure="foo";
....
if(structure == "foo")
{
   ...
}
于 2013-03-05T00:00:21.207 に答える