2013-03-04 48 views
-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,然后提示其余的信息。但是,当我运行这个它会显示其他cout和CIN即使我输入0为什么没有做什么是应该做的?

+1

什么结构的类型? – billz 2013-03-04 23:51:35

+0

显示你的声明结构' – Joe 2013-03-04 23:51:44

+0

我很惊讶,这编译(c可能,但C++通常很挑剔) – pm100 2013-03-04 23:57:00

回答

4

问题是您正在尝试比较字符串值,但实际上是在对指针值进行比较。您需要使用的功能像strcmp获得价值比较语义

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

你写的原始代码切实做好以下

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

我已经掩盖了一些细节存在(包括建筑) ,但基本上这就是你的原始样本正在做的。 C/C++实际上并没有字符串值的概念。它具有字符串文字和如何将它们转换为char阵列的了解有限,但不知道如何的值应有所了解。

+2

或更好的仍然使用std :: string – pm100 2013-03-04 23:55:36

+0

这样比较的结果是未指定的我试着做一个strcmp(结构,“0”),但它说“ISO C++禁止指针和整数之间的比较” – user1895783 2013-03-04 23:59:23

+0

@ user1895783 can你添加的代码,应该工作 – JaredPar 2013-03-05 00:01:27

0

扩大我的评论

使用

#include <string> 

... 

std::string structure; 

... 
structure="foo"; 
.... 
if(structure == "foo") 
{ 
    ... 
} 
相关问题