我正在编写一个从用户那里获取输入的程序。我需要输入以在单词之间包含空格。我无法找到解决方案来做到这一点。 在你提问之前,我在stackoverflow上尝试了同样的问题。这些是我尝试过的一些。 How to cin Space in 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;
}
答案 0 :(得分:4)
我无法发表评论,没有足够的积分,但您是否尝试在cin.ignore();
之前添加getline(cin, name, '\n');
?
像这样:
string setBusinessName()
{
string name = "";
cout << "The name you desire for your business:";
cin.ignore();
getline(cin, name, '\n');
cout << name;
return name;
}
答案 1 :(得分:1)
当你这样做时,只需在评论中添加更多解释:
cout << "Enter value:";
cin >> x;
当用户按 Enter 时执行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');
如果您不想猜测缓冲区中有多少个字符。
答案 2 :(得分:1)
#include <iostream>
#include <string>
using namespace std;
int main() {
string name1, name2, name3, name4, name5;
int a,b; //or float ...
cout << "Input name 1: ";
getline(cin, name1); //input: abc def
cout << "=> Name 1: "<< name1 << endl; //output: abc def
cout << "Input name 2: ";
getline(cin, name2); //input: abc def
cout << "=> Name 2: "<< name2 << endl; //output: abc def
cout<<"a: ";
cin>>a;
cout<<"a: "<<a<<endl;
cout << "Input name 3: ";
getline(cin, name3); //can not input
cout << "=> Name 3: "<< name3 << endl; //output:
cout<<"b: ";
cin>>b;
cout<<"b: "<<b<<endl;
cout << "Input name 4: ";
cin.ignore();
getline(cin, name4); //input: abc def
cout << "=> Name 4: "<< name4 << endl; //output: abc def
cout << "Input name 5: ";
cin.ignore();
getline(cin, name5); //input: abc def
cout << "=> Name 5: "<< name5 << endl; //output: bc def !!!!!!!!!!
//=> cin>>number; cin.ignore(); getline(cin, str); => OK
//else: !!!!!!!!
return 0;
}
答案 3 :(得分:0)
流中可能已存在某些内容,而getline()
只能读取它。
确保在此功能之前未使用cin>>
。
您可以在cin.ignore()
之前使用getline()
来避免流中已存在的内容。
答案 4 :(得分:0)
#include<bits/stdc++.h>
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();
return 0;
}
答案 5 :(得分:-1)
工作正常。我刚试过这个。
#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");
}