2012-08-29 45 views
4

我目前正在編寫「C++ Primer Plus」一書,並正在做一些編程工作。 因爲它似乎,我在和Xcode(4.3.3)的一個問題,因爲下面的代碼不起作用它是如何工作的:(cin >> int).get()在Xcode中不正常工作(4.3.3)

#include <iostream> 
    #include <string> 

    struct car 
    { 
     std::string maker; 
     int year; 
    }; 



int main() 
{ 
    using namespace std; 

    cout << "How many cars do you wish to catalog? "; 
    int nCars; 
    (cin >> nCars).get(); 

    car* aCars = new car[nCars]; 

    for (int i = 0; i < nCars; i++) 
    { 
     cout << "\nCar #" << (i + 1) << endl; 
     cout << "Please enter the make: "; 
     getline (cin, (aCars + i)->maker); 
     cout << "\nPlease enter the year made: "; 
     (cin >> (aCars + i)->year).get(); 
    } 
    cout << "Here is your collection: \n"; 

    for (int i = 0; i < nCars; i++) 
    { 
     cout << (aCars + i)->year << " " << (aCars + i)->maker << endl; 
    } 

    delete [] aCars; 
    return 0; 
} 

的問題是,我沒有機會進入任何製造商。該程序直接進入了我必須輸入年份的點,即使我使用「(cin >> nCars).get();」擺脫換行符。

我可以俯視嗎?

在此先感謝!

+0

您不得在不檢查返回值的情況下執行輸入操作。在這個階段沒有任何意義。 –

+2

使用'std :: vector '代替'new T []''。 – GManNickG

+0

對不起,我應該提到,本書中的exersise說程序應該使用「new」來創建一個動態數組。 exerscise本身很簡單,但我不知道爲什麼上面的代碼無法正常工作。 – milchschaum

回答

0

好吧,夥計們..我發現了這個問題。 使用cin.get()時,Xcode中的控制檯無法按預期工作。 我在終端以及Visual Studio(Win 7)中嘗試了相同的代碼,程序完美運行。

無論如何,謝謝大家的意見。我會在下次嘗試考慮他們。 :)

乾杯!

0

我懷疑你可能在windows上運行,並且兩個字節的換行符擊中了你。您可以改善的事情(對於那些不可笑長線),忽略:

cin >> nCars; 
cin.ignore(1024, '\n'); 

注意,因爲你靠流的數字處理,進入一個非數字(例如一年)QQ將導致編程只是完成而不要求任何更多的輸入。

你不需要在多年來做數學,所以把它們當作字符串而不是整數。那麼如果你需要的話,你可以在得到輸入後每年進行驗證。

+0

似乎不太可能。 Windows的C++運行庫「理解」換行符,並在輸入中看到兩個字節時返回「\ n」。不過,調用'ignore()'可能會修補任何問題。 –