簡體   English   中英

為什么我們需要在getline(cin,string)之前使用cin.ignore()?

[英]Why do we need to use cin.ignore() before getline(cin, string)?

為什么在輸入字符串之前需要使用cin.ignore()

反手程序是什么? 如果不使用cin.ignore()為什么會跳過字符串中的輸入(如果我們調用getline函數獲取更多變量cin.ignore()

僅當您之前有一些未讀的輸入時,才需要使用cin.ignore() 如果沒有,則不需要,這將導致您忽略所需的內容。 最常見的情況是忽略上一行結束的換行符。

如果有人鍵入“ foo <enter> bar”,而您想讀“ foo”然后是“ bar”,則需要忽略它們之間的<enter>(或使用自動執行此功能的函數)。

std::getline()僅在流中要輸入的內容前有換行符時才“跳過”輸入。 如果您之前執行過格式化提取而留下了剩余的換行符,則可能會出現這種情況。 默認情況下, std::getline()在獲取換行符后會限制提取。

ignore()是一個丟棄一定數量字符的函數(默認情況下要丟棄的數量為1)。 如果您在未格式化的提取之前使用它(例如std::getline() ),但是在格式化的提取之后使用(例如std::istream::operator>>() ),它將允許按預期讀取數據,因為它將丟棄剩余的換行符。

我在這里的回答中詳細討論了這一點

暫無
暫無

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

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