带空格的C++输入字符串
我正在编写一个程序,它接受来自用户的输入。我需要输入来包含单词之间的空格。我无法找到解决方案来做到这一点。 在问你之前,我用同样的问题在*上尝试了多个其他问题。这些是我尝试过的一些。 How to cin Space in c++?带空格的C++输入字符串
Demonstration of noskipws in C++
我的代码的问题是,一旦我setBusinessName方法被调用,它只是完成了自己。它输出然后返回,而不用等待我输入数据。帮助嘀......
string setBusinessName()
{
string name = "";
cout << "The name you desire for your business:";
getline(cin, name, '\n');
cout << name;
return name;
}
我不能评论的是,没有足够的积分,但你尝试getline(cin, name, '\n');
之前添加cin.ignore();
?
像这样:
string setBusinessName()
{
string name = "";
cout << "The name you desire for your business:";
cin.ignore();
getline(cin, name, '\n');
cout << name;
return name;
}
虽然我很确定这解决了OP的问题,但在一般情况下这是一个糟糕的想法。如果缓冲区中没有悬空的空白,您只需输入有效的输入。最好把'ignore'放在'>>'之后,你知道应该有一个EOL并将'ignore()'升级到'cin.ignore(numeric_limits
这是工作的罚款。我只是试过这个。
#include <iostream>
#include <string>
using namespace std;
string setBusinessName(){
string name = "";
cout << "The name you desire for your business:";
getline(cin, name);
cout << name;
return name;
}
int main() {
setBusinessName();
system("PAUSE");
}
系统(“PAUSE”)做什么? –
它暂停输出控制台。每当程序返回结果时,它都会帮助输出控制台暂停,直到关闭窗口。 – Chip
只是增加了评论的一些更多的解释,当你这样做:
cout << "Enter value:";
cin >> x;
当用户按下输入的CIN指令被执行,所以输入缓冲器具有用户插入的值和一个额外的'\n'
字符。如果继续执行cin
即可,但如果您想要使用getline
(就像您的情况在字符串中包含空格),您必须知道getline
将在缓冲区中第一次出现'\n'
时停止,所以从getline
将为空。
为了避免这种情况,如果你真的必须同时使用CIN和函数getline,您需要使用cin.ignore(streamsize n = 1, int delim = EOF)移除'\n'
从缓冲区,这个函数会清除缓存或streamsize
字符,直到匹配delim
的第一个字符(含),这里有一个例子:
cin << x;
cin.ignore(256, '\n');
getline(cin, name, '\n');
注意,建议使用:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
如果您不想猜测缓冲区中有多少个字符。
有帮助 - 'std :: cin.ignore()' - http://www.cplusplus.com/forum/beginner/9148/ – parasrish
有可能流中已有东西,并且getline()
只是读取它。
确保在此功能之前没有使用cin>>
。 并且您可以在getline()
之前使用cin.ignore()
来避免流中已有的内容。
听起来像你可能混合'>>'和'getline'。 '>>'在流中留下未解析的空白,通常留下行标记以让getline跳过。需要看到[mcve],以确保这是你遇到的,但。 – user4581301
试试这个编辑:[链接](http://cpp.sh/45q6s) –