-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 回答