![](/img/trans.png)
[英]Why does ignore() before getline() take one less character input?
[英]Why does using two getline function together, second one doesn't take the \n character?
#include <bits/stdc++.h>
using namespace std;
int main(){
string str1, str2;
getline(cin, str1); // aaa
getline(cin, str2); // bbb
cout << str1 << " " << str2; // aaa bbb
return 0;
}
當我將str1
輸入為"aaa\n"
時,為什么第二個getline()
不采用\n
?
cout
應該打印"aaa"
而不是"aaa bbb"
。
從cppreference的std::getline
的描述(粗體我的):
...直到發生以下情況之一...
b) 下一個可用的輸入字符是 delim,由 Traits::eq(c, delim) 測試,在這種情況下,分隔符從輸入中提取,但不附加到 str 。
因此,在您的情況下,每個輸入末尾的換行符都是從輸入 stream 中提取的,但不會添加到兩個string
變量中。
另外,請看一下:為什么我不應該#include <bits/stdc++.h>?
第一個std::getline()
讀取aaa
和其后的換行符,但丟棄換行符。 str1
中沒有保存'\n'
字符。
然后第二個std::getline()
讀入bbb
和它后面的換行符,但丟棄換行符。 str2
中沒有保存'\n'
字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.