2013-03-04 49 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") 
{ 
    ... 
} 
相關問題