我必须输入我的名字才能进入我的资源,我该怎么做

i have to cin my name to enter my resources how do i do that

cin << 名称 << endl; cout >> "my name is " << 名称 << endl;

问题

当你说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();