cin<<名称<< ENDL; cout>> "我的名字是" <<名称<< ENDL;
答案 0 :(得分:0)
<强>问题强>
当你说cin >> smth
时,你想得到精确的smth,仅此而已。终点标记不是它的一部分,因此不会消耗它。除非你有一个特殊的行类型,但标准库中没有这样的东西。
当你使用getline
时,你说你想要一条线。一行是以\n
结尾的字符串,结尾是它的组成部分。
所以问题是std::cin
在缓冲区中留下了一个结束行\n
字符。
示例强>
std::cin >> smth;
+---+---+---+---+---+----+
|'H'|'e'|'l'|'l'|'o'|'\n'| // In smth will be "Hello"
+---+---+---+---+---+----+
+----+
|'\n'| // But new-line character stays in buffer
+----+
std::cin >> smth2; // Its same like you would press just an 'enter', so smth2 is empty
<强>解决方案强>
std::cin.getline
或
std::cin >> smth;
+ std::cin.ignore();