c++ - 为什么 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
应该首先丢弃所有空格然后读取字符直到到达另一个空格?
任何帮助都深表感谢。
解决方案
流提取器 ( >>
) 以空格分隔 - 当它读取时,它会在遇到任何空格时停止。下次使用时,它会从上次中断的地方开始读取。如果您只想分隔换行符,则可以cin.getline()
改用。
编辑:来自@Pete Becker 的更正。
推荐阅读
- ros - 在 Ubuntu 19.1 上安装 ROS Melodic
- c - 输入一个短语到 scanf("%c", &ch)... (%c 用于序列,而不是单个符号)
- jms - Azure 服务总线:Amqp 空闲超时条件 = amqp:link:detach-forced
- reactjs - 禁用反应开关
- python - 在 SCP 之前列出 Google Cloud 虚拟机中的文件
- python - Python主循环和while循环
- php - 带有允许的空前缀的 symfony 路由导入不起作用
- php - DOMPDF 在呈现的 PDF 中省略了第二行
- sql-server - 如何将 bcp 用于身份列?
- angularjs - 如果已经登录 ionic,则重定向用户