Ir para conteúdo
Fórum Script Brasil
  • 0

Entrada Do Teclado De String?


bonoddr

Pergunta

Olá pessoal. Gostaria de saber se alguém já se deparou com o meu problema.

Estou instanciando objetos através de uma classe func com 4 parâmetros (string,int,int,int) através de um loop for. abaixo exibirei o código:

void main(){

int creditos;

string nome;

int idade;

int matricula;

const int tam=3;

for (int i=0;i<tam;i++)

{

cout<<"Entre com os dados do funcionario:"<<endl;

cout<<"Nome: ";

getline(cin,nome);

cout<<"Idade: ";

cin>>idade;

cout<<"Matricula: ";

cin>>matricula;

cout<<"Creditos: ";

cin>>creditos;

cout<<endl;

}

}

uso a função getline da biblioteca string para "gravar" uma string composta (por exemplo: joao pereira). Mas quando instancio no meu programa o 2º objeto, ele simplesmente pula esta linha e vai pra variável "idade". Se eu coloco duas vezes a linha do getline, no 1º objeto devo inserir o nome duas vezes, mas a partir do 2º, insiro normalmente.

Alguém sabe como resolvo esse problema? Valeu! smile.gif

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

cara, não sei, fui testar aqui e o gcc não compilou, deve ta mal configurado, vou dar uma olhada.

Link para o comentário
Compartilhar em outros sites

  • 0

gets(var) não é recomendável para o padrão C++... no meu 1º post, eu coloquei só um pedaço do meu código, vou colocá-lo abaixo. Se quiser testar kartter, você vai entender melhor qual o problema..

//.h:

#ifndef FUNC_H

#define FUNC_H

#include <string>

#include <iostream.h>

class func{

private:

string nome;

int idade;

int matricula;

int creditos;

public:

func(int); //sobrecarga de construtor

func(string, int, int,int);

~func();

int retornaCreditos();

void exibeFunc();

func operator+(func &s2);

};

#endif

//.cpp:

#include "func.h"

using std::cin;

using std::cout;

using std::endl;

using std::string;

func::func(string nom, int idad, int matr, int credi)

{

nome=nom;

idade=idad;

matricula=matr;

creditos=credi;

}

func::func(int cred)

{

creditos=cred;

}

int func::retornaCreditos()

{

return creditos;

}

void func::exibeFunc()

{

cout<<"Nome: "<<nome<<endl;

cout<<"Idade: "<<idade<<endl;

cout<<"Matricula: "<<matricula<<endl;

cout<<"Creditos: "<<creditos<<endl<<endl;

}

func func::operator+(func &s2)

{

unsigned int c = creditos + s2.creditos;

func t©; //altere para c entre parenteses depois do "t", fórum modifica

return t;

}

void main()

{

func *temp;

temp = new func(0);

func *totalCreditos;

totalCreditos = new func(0);

int creditos;

string nome;

int idade;

int matricula;

const int tam=3; //tem q ser const pra não mudar depois

func *funcionarios[tam];

func *crfunc[tam];

for (int i=0;i<tam;i++)

{

cout<<"Entre com os dados do funcionario:"<<endl;

cout<<"Nome: ";

getline(cin,nome);

cout<<"Idade: ";

cin>>idade;

cout<<"Matricula: ";

cin>>matricula;

cout<<"Creditos: ";

cin>>creditos;

cout<<endl<<endl;

cin.ignore(); //aqui está a linha editada

funcionarios = new func(nome,idade,matricula,creditos);

crfunc = new func(creditos);

*totalCreditos = (*crfunc) + *temp;

temp = totalCreditos;

funcionarios->exibeFunc();

}

cout<<"Total de creditos: "<<totalCreditos->retornaCreditos()<<endl;

}

func::~func(){}

Na linha do getline (o mais recomendável para codificação c++), no 1º objeto eu consigo inserir o nome, mas a partir do 2º objeto, a string nome é pulada e não é armazenada. E se eu colocar duas vezes esta linha, na instanciação do 1º objeto eu obviamente tenho que entrar com o nome duas vezes, mas nos demais eu entro uma única vez. Estranho né? Sabe porque isso acontece? Propõe alguma solução? huh.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Gostei do seu jeito de programar cara.

Num dá p/ mim testar agora, mas olha o que eu vi no seu codigo::

func::func(string nom, int idad, int matr, int credi)
{
nome=nom;
idade=idad;
matricula=matr;
creditos=credi;
}

aki, num sei o que significa esta linha "using std::string", mas partindo do principio que sua funcao recebe uma string, para que a variavel "nome" receba a variavel "nom" num teria que ser atribuido posicao por posicao, tipo:

nome[0]=nom[0];

.......

que é o que a funcao strcpy faz??

P.S: tem algumas coisa no seu código que eu não tenho conhecimento, se você puder me explicar ficaria muito agradecido, e facilitaria eu tentar te dar uma ajuda.

falow!

kartter

Link para o comentário
Compartilhar em outros sites

  • 0

using std::string é usado para poder utilizar os metodos da classe string. strcpy copia um valor em uma string

Link para o comentário
Compartilhar em outros sites

  • 0

using std::string é uma maneira mais nova de programar, acredito que tenha sido incorporada com o C#.

A própria biblioteca string de std se encarrega de atribuir uma string à outra sem precisar percorrer caractere por caractere, como você já deve ter visto em char nome[64] ou char *nome.

A função strcpy copia uma string para a outra, mas isso quando não se usa a biblioteca string. No caso do construtor do programa, se o parâmetro nome fosse indicado por char *nomeParam por exemplo, eu atribuiria o nomeParam em nome com o método strcpy.

Eu já consegui ver o problema. com o método cin.ignore() depois do meu último cin, parece que o buffer é esvaziando para novas atribuições para o próximo objeto, mas não sei porque isso acontece somente para um objeto do tipo string.

Que vocês acham? Comentem ae, valeu! biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

std::string na verdade vem do C++ onde existe a instrução using namespace que pode ser seguida de std::string

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...