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

Asked

Viewed 10,296 times

1

I’m in the second semester of H.I., and I’m sorry if it’s a trivial mistake. I need to read a name and surname, for an agenda, I am using function and already tried Getline, Cin.get(variable, size), but none works, follows below the code, what I need is in Function: void incluir()

#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);
}

3 answers

1

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

1


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

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

Follow 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;
}

0

I hope to contribute, this is a small solved string reading exercise, which consists of reading a name with space and the age of the person whose name was read, and in the end compares which age is older. This is a good example of string reading.

#include<iostream>
#include<locale>
using namespace std;

string nome1;
string nome2;
string nome3;

int id1, id2, id3;
char op[3];
main(){
    setlocale(LC_ALL, "");

    do{

        cout << "Digite o nome e a idade da primeira pessoa, respectivamente: " << endl;
        cin.ignore();
        getline(cin, nome1);
        cin >> id1;

        cout << "Digite o nome e a idade da segunda pessoa, respectivamente: " << endl;
        cin.ignore();
        getline(cin, nome2);
        cin >> id2;

        cout << "Digite o nome e a idade da terceira pessoa, respectivamente: " << endl;
        cin.ignore();
        getline(cin, nome3);
        cin >> id3;

        if(id1>id2 && id1>id3)
            cout << "A pessoa mais velha é " << nome1 << "  com " << id1 << " anos " << endl;
        else 
            if(id2>id1 && id2>id3)
                cout << "A pessoa mais velha é " << nome2 << "  com " << id2 << " anos " << endl;
        else 
            cout << "A pessoa mais velha é " << nome3 << "  com " << id3 << " anos " << endl;

         cout << "Deseja sair? Caso a resposta seja afirmativa digite \"sim\", caso seja negativa digite qualquer coisa..." << endl;
         cin >> op;
    }while(op[0] != 's' && op[1]!='i' && op[2]!= 'm');
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.