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