我简单的'if'语句没有做代码中的内容

时间:2013-03-04 23:50:43

标签: c++

在这个小代码部分,我正在收集用户的输入数据。如果给定的第一个输入为“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。为什么它没有做它应该做的事情?

2 个答案:

答案 0 :(得分:4)

问题是你正在尝试对字符串值进行比较,但实际上你正在对指针值进行比较。您需要使用类似strcmp的函数来获取值比较语义

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

您编写的原始代码实际上是在执行以下操作

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

我已经掩盖了一些细节(包括架构),但基本上这就是你的原始样本。 C / C ++实际上没有字符串值的概念。它对字符串文字以及如何将它们转换为char数组的理解有限,但不了解如何理解这些值。

答案 1 :(得分:0)

扩展我的评论

使用

#include <string>

...

std::string structure;

...
structure="foo";
....
if(structure == "foo")
{
   ...
}