為什麼格式化提取後 std::getline() 會跳過輸入?
某些格式化提取後,std::getline() 會跳過輸入。我們可以利用下面的程式碼簡單地檢查這個錯誤:-
示例程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string name;
string city;
if (cin >> name && getline(cin, city)){
cout << "Your name " << name << " and city " << city;
}
}輸出
Amal Your name Amal and city
我們可以看到程式沒有接受第二個輸入。有時候它可以接受第二個輸入,但在輸出中只顯示第一個輸入。現在的問題是為什麼會出現這種現象?
此問題的主要原因是,當我們編寫第一個字串時,我們按下了回車鍵或返回鍵。當按下回車鍵或返回鍵時,它會在當前行後面插入‘\n’字元。這個字元導致了該問題。它忽略了字串的下一部分。
如果名稱為“Amal”,那麼它內部獲取的是“Amal\n”。要解決這個問題,一個選擇是在第一個提取後呼叫 std::cin.ignore()。然後它將丟棄下一個可用字元,這樣就可以正常工作了。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言
C++
C#
MongoDB
MySQL
JavaScript
PHP