[英]Why getline skips first line?
在以下代碼中, getline()
跳過讀取第一行。 我注意到在注釋“ cin >> T
”行時,它正常工作。 但我想不出原因。
我想在讀行之前讀一個整數! 如何解決?
#include <iostream>
using namespace std;
int main () {
int T, i = 1;
string line;
cin >> T;
while (i <= T) {
getline(cin, line);
cout << i << ": " << line << endl;
i++;
}
return 0;
}
cin >> T;
這會消耗您在標准輸入上提供的整數。
第一次調用:
getline(cin, line)
...您在整數后使用換行符。
您可以通過在cin >> T;
之后添加以下行來讓cin
ignore
換行符cin >> T;
:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
(對於std::numeric_limits
您需要#include <limits>
)
您的輸入文件中很可能有換行符,並且正在立即處理,如本頁所述:
http://augustcouncil.com/~tgibson/tutorial/iotips.html
您可能想要調用cin.ignore()
讓它拒絕一個字符,但是,您可能想要閱讀更多提示,因為有關於如何處理數字讀取的建議。
這一行只讀取一個數字:
cin >> T;
如果你想解析用戶輸入,你需要考慮到他們不斷點擊 <enter> 因為輸入被緩沖。 為了解決這個問題,有時使用 getline 讀取交互式輸入更簡單。 然后解析該行的內容。
std::string userInput;
std::getline(std::cin, userInput);
std::stringstream(userInput) >> T;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.