1
我正在編譯下面的程序,並且我知道char&
的提取器會繼續提取字符,即使它是空白字符。我禁止了前導空白字符的跳過,期望前進的讀取嘗試失敗(因爲格式化的提取在空白處停止),但當它成功時會感到驚訝。爲什麼std :: operator >>(istream&,char&)會提取空格?
#include <iostream>
#include <sstream>
int main()
{
std::istringstream iss("a b c");
char a, b, c;
iss >> std::noskipws;
if (iss >> a >> b >> c)
{
std::cout << "a = \"" << a
<< "\"\nb = \"" << b
<< "\"\nc = \"" << c << '\n';
}
}
輸出:
a = "a" b = " " c = "b"
正如可以從輸出中看到,b
給予"a"
和"b"
之間的空間的值;和c
被賦予以下字符"b"
。我期待b
和c
都沒有任何價值,因爲提取應該由於空白引導而失敗。這種行爲的原因是什麼?
http://www.cplusplus.com/reference/ios/skipws/ – Gasim
根據資源,它會忽略空白(不失敗),直到非空白字符到位。編輯:你正在使用noskipws代表「不跳過空白」,它給你一個預期的結果。 – Gasim
檢查一下這個例子(同樣也對3條評論感到抱歉,它很難從手機上寫下來):http://www.cplusplus.com/reference/ios/noskipws/ – Gasim