我想讓用戶輸入一些數據,然後將其存儲在一個結構中,但是我有麻煩知道我應該使用哪個函數,有什麼區別? cin或getline()?無論是我使用的函數,它似乎需要在'\ n'鍵,並使我的程序崩潰,但我不是100%,如果這是問題...因爲它不斷崩潰。C++跳過新的行鍵?
我玩過他們兩個,這是我的。
string temp;
int id;
cout << endl << "Full name (last, first): ";
cin >> temp;
cin.ignore(1, '\n');
myData[fileSize] = parseName(temp);
cout << endl << "ID: ";
cin >> id;
myData[fileSize].id = id;
cout << endl << "Address: ";
cin >> temp;
temp.copy(myData[fileSize].address, temp.length(), 0);
變量fileSize是數組當前的哪個元素,函數parseName將名稱拆分爲last和first。
我一直在閱讀幾個函數,如cin.ignore()和noskipws,但不知道如何使用它們。順便說一句,用戶輸入數據的方式是「最後,第一次」,後面有一個逗號和空格(這是解析函數正在查找的內容)。
另外我不確定地址部分是否是最好的方法來做到這一點,我有結構myData.address是一個字符數組,因爲我不知道如何處理字符串。我仍然對C++沒有信心。謝謝你的幫助。
編輯:如果我註釋掉ID和地址部分,程序會循環6次說我有一個無效的條目(這是主要部分),所以在按Enter後讀取6或7個鍵。 如果我以一切方式離開,這就是我所得到的。
Full name (last, first): terminate called after throwing an instance of 'std::ou
t_of_range'
what(): basic_string::copy
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Process returned 3 (0x3) execution time : 4.328 s
Press any key to continue.
當它崩潰時會發生什麼?請將此設爲[MCVE](http://stackoverflow.com/help/mcve)。 – ryanpattison
你怎麼知道它因爲換行而崩潰?你測試過解析和其他一切嗎?嘗試隔離你的問題。在我眼中,你有3個可能炸燬的地方。還有一個指導如何寫「爲什麼我的代碼不工作」的問題。 – luk32
確保你的地址有足夠的空間來容納你試圖複製到它的地址。 – user2970916