How to read a string with C ++ space inside a function

1

I'm in the second half of S.I and sorry if it's a trivial mistake. I need to read a name and surname, for a calendar, I'm using function and I've already tried Getline, cin.get (variable, size), but none works, here's the code below, what I need this in Function: void incluir() p>

#include <iostream>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <fstream>
using namespace std;
void incluir();
void alterar(); 
void excluir();
void recuperar();
int vet[10]={0,0,0,0,0,0,0,0,0,0};
struct agenda {
    string email;
    string nome;
    string telefone;
};
struct agenda pessoa[10];
int main () {
    int opc;    
    do{
        cout<<"[1] incluir pessoa"<<endl;
        cout<<"[2] Alterar pessoa"<<endl;
        cout<<"[3] Excluir pessoa"<<endl;
        cout<<"[4] Recuperar pessoa"<<endl;
        cout<<"[5] Sair"<<endl;
        cin>>opc;
        system("clear || cls");
        switch (opc){
            case 1:
                incluir();

            break;

            case 2:
                alterar();

            break;  

            case 3:
                excluir();

            break;
            case 4:
            break;
            case 5:
            break;
            default:
                cout<<"Opção Invalida"<<endl;   
        }
    }while(opc != 5);

    return 0;
}

void incluir(){ 
    int i, cont=0;
    for(i=0;i<10;i++){
        if(vet[i] == 0){
            cout<<"Digite o Email"<<endl;
            cin>>pessoa[i].email;
            cout<<"Digite o Nome"<<endl;
            cin.get(pessoa[i].nome);
            cout<<"Digite o Telefone"<<endl;
            cin>>pessoa[i].telefone;
            vet[i]=1;
            system("clear || cls");
            break;

        }
        else{
            cont++;
        }

    }
        if(cont==10){
            cout<<"Agenda Cheia"<<endl;
        }

}


void alterar(){
    int i, escolha, cont2=0;
    cout<<"Qual Contato Deseja Alterar?"<<endl;
    for(i=0;i<10;i++){
        if(vet[i] == 0){
            cout<<"["<<i+1<<"] Vazio"<<endl;
        }
        else{
            cout<<"["<<i+1<<"] "<<pessoa[i].nome<<endl;
        }
    }
    do{
        cin>>escolha;
        if((escolha<=10) && (escolha>0)){
            system("clear || cls");
            cout<<"Digite o Email"<<endl;
            cin>>pessoa[escolha-1].email;
            cout<<"Digite o Nome"<<endl;
            cin>>pessoa[escolha-1].nome;
            cout<<"Digite o Telefone"<<endl;
            cin>>pessoa[escolha-1].telefone;
            if (vet[escolha-1] == 0){
                vet[escolha-1] = 1;
            }
            system("clear || cls");
            cont2=1;
        }
        else{
            cout<<"Contato não existente"<<endl;
        }
    }while(cont2!=1);
}

void excluir(){
    int i, escolha, cont2=0;
    system("clear || cls");
    cout<<"Qual Contato Deseja Excluir?"<<endl;
    for(i=0;i<10;i++){
        if(vet[i] == 0){
            cout<<"["<<i+1<<"] Vazio"<<endl;
        }
        else{
            cout<<"["<<i+1<<"] "<<pessoa[i].nome<<endl;
        }
    }
    do{
        cin>>escolha;
        if((escolha<=10) && (escolha>0)){
            vet[escolha-1]=0;
            system("clear || cls");
            cont2=1;
        }
        else{
            cout<<"Contato Inexistente"<<endl;
        }
    }while(cont2!=1);
}
    
asked by anonymous 16.11.2017 / 14:31

2 answers

1

You can use the std::getline() function combined with the std::ignore() function.

The std::getline() function is able to read the input data until a new line is detected while std::ignore() clears the new line character \n of the input buffer std::cin .

Here is a practical example:

#include <iostream>
#include <cstring>

using namespace std;

struct agenda {
    string email;
    string nome;
    string telefone;
};

int main( void )
{
    struct agenda a;

    cout << "Digite o E-Mail: ";
    cin.ignore();
    getline( cin, a.email );

    cout << "Digite o Nome: ";
    cin.ignore();
    getline( cin, a.nome );

    cout << "Digite o Telefone: ";
    cin.ignore();
    getline( cin, a.telefone );

    return 0;
}
    
16.11.2017 / 14:51
1

You can use cin.ignore(256,'\n'); before reading cin>>algo

    
16.11.2017 / 14:51