2015-09-04 102 views
2

所以我正在從我的班級教科書的例子從C++開始:早期對象,我遇到了一個問題。我被指示創建一個程序,該程序讀入一些數據並在最後打印它,總共2個實例。當第二個實例(md2)運行時,它不會讓我在第一個字段中輸入任何內容。這實在讓我感到困擾,而且我無法弄清楚。提前致謝!對象的第二個實例不能正常工作

#include <iostream> 

using namespace std; 

class MovieData 
{ 
private: 
    string movieTitle; 
    string movieDirector; 
    int movieYear; 
    int movieRunTime; 
public: 
    MovieData() 
    { 
     GetTitle(); 
     GetDirector(); 
     GetYear(); 
     GetRunTime(); 
    } 

    void GetTitle() 
    { 
     cout << "Specify A Title\n"; 
     getline(cin, movieTitle); 
     cout << endl; 
    } 
    void GetDirector() 
    { 
     cout << "Specify A Director" << endl; 
     getline(cin, movieDirector); 
     cout << endl; 
    } 
    void GetYear() 
    { 
     cout << "Specify A Year" << endl; 
     cin >> movieYear; 
     cout << endl; 
    } 
    void GetRunTime() 
    { 
     cout << "Specify A Duration In Minutes" << endl; 
     cin >> movieRunTime; 
     cout << endl; 
    } 

    void SetTitle() 
    { 
     cout << "R" << movieTitle << endl; 
    } 
    void SetDirector() 
    { 
     cout << "R" << movieDirector << endl; 
    } 
    void SetYear() 
    { 
     cout << "R" << movieYear << endl; 
    } 
    void SetRunTime() 
    { 
     cout << "R" << movieRunTime << endl; 
    } 


}; 

void PrintData(MovieData md); 

int main() { 
    MovieData md1; 
    PrintData(md1); 
    MovieData md2; 
    PrintData(md2); 
} 


void PrintData(MovieData md) 
{ 
    md.SetTitle(); 
    md.SetDirector(); 
    md.SetYear(); 
    md.SetRunTime(); 
    cout << endl; 
} 
+0

邊注:不,你需要實例化對象? –

+0

我不關注。 – karite36

+0

@BlackFrog在Java或C#中,每個對象都是一個指針,所以你需要用'new'命令初始化'MovieData'。 (例如'MovieData md1 = new MovieData()'。這個例子是C++。在C++中,簡單地聲明一個類的實例將會調用構造函數 –

回答

5

之所以出現這種情況是準備md1當您從最終用戶閱讀的最後一個項目是int。輸入的最終用戶類型,然後按輸入。 C++將整數讀入movieRunTime,但將字符代碼保留爲輸入緩衝供下次閱讀。

下一次,輸入字符代碼將返回到GetTitle,這意味着標題將變爲空字符串。那是你正在觀察的行爲。

要解決此問題,到std::cin.ignore呼叫添加到您的構造函數:

MovieData() 
{ 
    GetTitle(); 
    GetDirector(); 
    GetYear(); 
    GetRunTime(); 
    std::cin.ignore(256, '\n'); 
} 
+0

你是一個拯救生命的人,我希望我們能夠在課堂上完成這一切! – karite36

+0

@ karite36我認爲學習正在發生的事情是你任務的重要組成部分。出現在輸入和輸出的多個地方,所以瞭解這裏發生的事情非常有用 – dasblinkenlight

+0

沒有注意到複選標記,它的工作原理我們從未涉及過緩衝,它不在章節中,問題是英寸。看看學校每學期使用單獨書籍會發生什麼情況?不一致。 – karite36

相關問題