首页 > 解决方案 > 为什么 std::cin 没有从一开始就读取

问题描述

我正在研究一个涉及如何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应该首先丢弃所有空格然后读取字符直到到达另一个空格?

任何帮助都深表感谢。

标签: c++cin

解决方案


流提取器 ( >>) 以空格分隔 - 当它读取时,它会在遇到任何空格时停止。下次使用时,它会从上次中断的地方开始读取。如果您只想分隔换行符,则可以cin.getline()改用。

编辑:来自@Pete Becker 的更正。


推荐阅读