簡體   English   中英

為什么 getline 跳過第一行?

[英]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.

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