带空格的C ++输入字符串

时间:2016-12-05 22:46:27

标签: c++

我正在编写一个从用户那里获取输入的程序。我需要输入以在单词之间包含空格。我无法找到解决方案来做到这一点。 在你提问之前,我在stackoverflow上尝试了同样的问题。这些是我尝试过的一些。 How to cin Space in c++?

std::cin input with spaces?

Demonstration of noskipws in C++

Effect of noskipws on cin>>

我的代码的问题是,只要调用我的setBusinessName方法,它就会自行完成。它输出然后返回自己而不等我输入我的数据。需要帮助......

string setBusinessName()
{
    string name = "";
    cout << "The name you desire for your business:";
    getline(cin, name, '\n');
    cout << name;
    return name;
}

6 个答案:

答案 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");
}