簡體   English   中英

C ++將用戶輸入的字符串句子存儲到向量中

[英]C++ store string sentences from user input into a vector

我是C ++的初學者,目前正在學習向量。 這是一個簡單的代碼,程序獲取用戶輸入並將其存儲在向量中,然后繼續打印每個元素的存儲值:

int main(){
vector<string> myVector;
string myInput;
int n;
cin>>n;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
for(int i = 1; i <= n;i++){
  cout<<"loop count: "<<i<<endl; //added for checking the current loop
  getline(cin, myInput);
  cin.ignore(numeric_limits<streamsize>::max(),'\n');
  myVector.push_back(myInput);
  }
for(unsigned int j = 0;j < myVector.size(); j++){
cout<<myVector[j]<<endl;
}
return 0;
}

但是,當我運行代碼時,在用戶字符串輸入過程中,它允許我輸入兩個字符串,最后進入下一個循環。 程序只為每個循環打印出第一個輸入的字符串。 所以我的問題是:

1)這背后的原因是什么? 為什么用戶在進入下一個循環之前需要輸入兩個字符串? 有人可以向我解釋。

2)如何解決?

編輯:這是我的示例輸入和輸出:

輸入:

3
input loop count: 1
we are
the champions
input loop count: 2
no time
for losers
input loop count: 3
we are
the champions

輸出:

we are
no time
we are

問題是循環內的ignore調用。

std::getline將默默地吃掉尾隨的換行符,但是由於您隨后調用ignore ,因此必須輸入第二行才能使ignore得到滿足。

只需從循環中刪除ignore調用,它便會按預期工作。

您是否嘗試放入cin.clear();? cin.sync(); 在getline函數之前? cin和getline在您同時使用它們時會給您帶來問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM