簡體   English   中英

為什么需要第二個 cin.ignore() ?

[英]Why is a second cin.ignore() necessary?

我注意到,每當我編寫一個使用std::cin的程序時,如果我希望用戶按 Enter 鍵結束程序,我必須編寫std::cin.ignore()兩次才能獲得所需的行為。 例如:

#include <iostream>

int main(void)
{
    int val = 0;
    std::cout << "Enter an integer: ";
    std::cin >> val;

    std::cout << "Please press Enter to continue..." << std::endl;

    std::cin.ignore();
    std::cin.ignore();  // Why is this one needed?
}

我還注意到,當我不將cin用於實際輸入而僅用於最后的ignore()調用時,我只需要一個。

Discl:我正在簡化真正發生的事情。

第一個用於清除提取運算符 (>>) 未使用的內容。 第二個等待另一個\n。

當我們在提取后執行 std::getline 時,情況完全相同: a the_stream::ignore(std::numeric_limits<streamsize>::max(), '\n'); 在調用 std::getline() 之前需要

那很奇怪。 你在什么平台上運行? 根據定義, ignore從輸入 stream 中提取並丟棄 n 個字符,或者如果遇到 EOF 則停止。 如果您不指定任何參數,它將提取 1 個字符。 在 Windows 上,行尾同時包含一個\r和一個\n - 總共兩個字符(回車后跟一個換行符)。

暫無
暫無

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

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