[英]why is std::cin not reading from the start
我在看一個涉及std::cin
如何工作的問題。 這是一個問題:
如果在要求您輸入時鍵入以下兩個名稱(例如Samuel Beckett),以下程序會做什么?
#include <iostream>
#include <string>
int main() {
std::cout << "What is your name? ";
std::string name;
std::cin >> name;
std::cout << "Hello, " << name << std::endl << "And what is yours? ";
std::cin >> name;
std::cout << "Hello, " << name << std::endl << "; nice to meet you too!" << std::endl;
return 0;
}
我期望輸出為:
What is your name? Samuel Beckett
Hello, Samuel
And what is yours? Hello, Samuel
; nice to meet you too!
但是輸出是:
What is your name? Samuel Beckett
Hello, Samuel
And what is yours? Hello, Beckett
; nice to meet you too!
任何人都可以幫忙, std::cin
如何工作?
我知道如果我這樣做:
std::string a, b;
std::cin >> a >> b;
並輸入兩個單詞,那么a
將有第一個單詞, b
將有第二個單詞,但是為什么會這樣呢? 不是std::cin
應該首先丟棄所有空白,然后讀取字符直到到達另一個空白????
任何幫助深表感謝。
流提取器( >>
)是由空格分隔的-讀取時,遇到任何空格時它將停止。 下次使用時,它將從中斷處開始讀取。 如果只想在換行符上定界,則可以使用cin.getline()
代替。
編輯:來自@Pete Becker的更正。
如果在要求您輸入時鍵入以下兩個名稱(例如Samuel Beckett),以下程序會做什么?
當遇到空格時(除其他情況外), operator>>
停止讀取。 因此,對>>
的第一次調用僅返回Samuel
,將Beckett
留在輸入緩沖區中,以便對>>
的下一次調用返回。 這正是您所看到的情況。
我知道如果我這樣做:
std::string a, b; std::cin >> a >> b;
並輸入兩個單詞,則a將具有第一個單詞,b將具有第二個單詞。
兩者之間沒有任何區別
std::cin >> a >> b;
和
std::cin >> a;
std::cin >> b;
在第一種情況下, operator>>
返回對要讀取的流的std::istream&
引用,該引用允許將多個操作鏈接在一起。 但是,同樣的操作也可以在單獨的語句中完成。
不是std :: cin應該首先丟棄所有空白,然后讀取字符直到到達另一個空白????
不是std::cin
本身,而是operator>>
,但是是的,這正是這里發生的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.