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