我必须输入我的名字才能进入我的资源,我该怎么做
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();
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();