2011-04-30 62 views
0

我需要關於這部分代碼的幫助......我應該將兩個雙打給schmoo。如果我這樣做「Schmoo(8.0,9.0);」它的作品發現,但是當我嘗試它時,我得到一個錯誤。我應該從cin讀取輸入,看起來像這樣「添加schmoo 8.0 7.0」我認爲我正在提取雙打錯誤,如何從cin正確提取每個東西。只要他們是輸入,我需要這個繼續。C++從stdin和stdout讀入內容。此外運算符超載

while(cin){ 
    string command1 = "add schmoo"; 
    string input; 
    cin >> input; 
    double a,b; 
    if(input == command1){ 
     cin >> a >> b; 
     Schmoo *a = new Schmoo(a,b); 
     c.insertFront(a); 
    } 
    string command2 = "throw mud"; 

    if(input == command2){ 
     cin >> a >> b; 
     c.throwMudAt(a,b); 
    } 

此外,我需要這個超載幫助opperator:

ostream &operator<<(ostream &os, Schmoo &s){ 
    if(s.getMud() == 1){ 
    os << "Schmoo at (" << s.x << ", " << s.y << ") was hit mud " << mud << "time."; 
    } 
    os << "Schmoo at (" << s.x << ", " << s.y << ") was hit with mud" << mud << "times."; 
    return os; 
} 

我越來越具有與s.getMud做一個錯誤();我之前使用過指針,但這個班對任何有指針的人都不是朋友。但getMud是這個類中的同一個類的函數,我該如何使用getMud();在這方面。

+2

要使代碼看起來正確,請將其縮進4個空格或選擇代碼並點擊文本框上方的「{}」按鈕。 – Xeo 2011-04-30 19:55:23

+0

你的代碼有一個問題:'double a,b; cin >> a >> b; Schmoo * a =新的Schmoo(a,b);' – MFH 2011-05-01 00:10:23

回答

1

cin直到遇到第一個空白爲止,所以input字符串將只是「添加」,而不是「添加schmoo」。更好地閱讀第一個字符串,檢查它是否是「添加」,然後閱讀下一個字符串(您可能想添加到比schmoo更多),然後閱讀double。或者將命令更改爲「add_schmoo」。


對於您的超負荷,類Schmoo如何定義?

0

您的問題是從這一行主要是來:

string input; 
cin >> input; 

如果您輸入add schmoo 8.0 9.0,那麼cin >> input將無法​​正常工作,因爲你給它時,它應該停止讀取字符的不實指示。

+1

'cin'讀取直到第一個空格,所以'input'將只包含「add」。 – Xeo 2011-04-30 20:01:54

+0

我個人從不使用'cin'字符串,所以我不確定:)。我通常使用getline()來代替。 – riwalk 2011-04-30 20:03:06

+0

什麼是固體識別? cin >> input >> input1; – adsderek 2011-05-01 03:46:01