Ir ao conteúdo
  • Cadastre-se
nanquinote

Listas em c++

Recommended Posts

Boa noite, o algoritmo abaixo deveria criar 2 listas (série a e b ), cada uma com n structs de exercícios.

Tudo foi bem até eu colocar a série b... O problema é que os valores que eu coloco na a ficam na b também.

Sei que fiz alguma cagada (ou várias), mas não estou vendo o porquê disso. Alguém me ajuda?

 

#include <iostream>
#include <string>
#define MAX_LIST 2
using namespace std;
							//SERIE B NAO GRAVA!
struct EXERCICIO{
	string nome;
	int serie;
	int repeticoes;
	float peso;	
}auxA, auxB;

bool insere(EXERCICIO serie[], string n, int s, int r, float p, int &last);
bool exibe(EXERCICIO serie[], int &last, char ab);

int main(){
	
	EXERCICIO serieA[MAX_LIST];
	EXERCICIO serieB[MAX_LIST];
	int lastA=0, i;
	char ab;
	bool status;
	
	//SERIE A
	for(i=0; i<MAX_LIST; i++){
		cout << "\t\tINSERCAO DE EXERCICIOS DA SERIE A: ";
		cout << "\n\tEXERCICIO " << i+1;
		cout << "\nNome do exercicio: "; getline(cin, auxA.nome);
		cout << "\nQt. de Series: "; cin >> auxA.serie;
		cout << "\nRepeticoes: "; cin >> auxA.repeticoes;
		cout << "\nPeso: "; cin >> auxA.peso;
		cin.ignore(); 
		cout << "\n\n";
		status = insere(serieA, auxA.nome, auxA.serie, auxA.repeticoes, auxA.peso, lastA);
		if(status == true){
			cout << "\nInsercao realizada com sucesso" << endl;
		}
		system("cls");		

	}		

	//SERIE B
	int lastB=0;
	int l;
	for(l=0; l<MAX_LIST; l++){
	cout << "\t\tINSERCAO DE EXERCICIOS DA SERIE B: ";
	cout << "\n\tEXERCICIO " << i+1;
	cout << "\nNome do exercicio: "; cin.ignore(); getline(cin, auxB.nome);
	cout << "\nQt. de Series: "; cin >> auxB.serie;
	cout << "\nRepeticoes: "; cin >> auxB.repeticoes;
	cout << "\nPeso: "; cin >> auxB.peso;
	cin.ignore(); 
	cout << "\n\n";
	status = insere(serieB, auxB.nome, auxB.serie, auxB.repeticoes, auxB.peso, lastB);
	if(status == true){
		cout << "\nInsercao realizada com sucesso" << endl;
	}
	system("cls");		
	}		
	
	ab = 'A';
	exibe(serieA, lastA, ab);
	ab = 'B';
	exibe(serieA, lastB, ab);
	
}

bool insere(EXERCICIO serie[], string n, int s, int r, float p, int &last){
	if(last == MAX_LIST){
		cout << "\nLista cheia." << endl;
		return false;
	}else{
		serie[last].nome = n;
		serie[last].serie = s;
		serie[last].repeticoes = r;
		serie[last].peso = p;
		
		last++;
	}
	return true;
}

bool exibe(EXERCICIO serie[], int &last, char ab){
	int i;
	if(last == 0){
		cout << "Lista vazia.";
		return false;
	}
	cout << "\n\t\tSERIE " << ab;;
	for(i=0; i<last; i++){
		cout << "\n\tEXERCICIO " << i+1 << ": ";
		cout << "\nNome: " << serie[i].nome;
		cout << "\nSerie: " << serie[i].serie;
		cout << "\nRepeticoes: " << serie[i].repeticoes;
		cout << "\nPeso: " << serie[i].peso;
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@CiroboyBR Era isso mesmo. Agora tá quase tudo certo, o único problema é que as primeiras letras do nome do exercício (var auxY.nome) estão sendo cortadas (apenas na série b).

 

De qq forma, não sei nem se essa era a estrutura correta pro problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

en vez de usar cin.ignore() para resolver problemas com o buffer C++ provee outro membro que é ao meu ponto de vista bem melhor que o ignore, essa função membro é a istream::sync. Se você quiser usar varios getline ou chars consecutivamente e tiver problema com o buffer chame cin.sync(), isso "sincroniza" o buffer de entrado com o que foi escrito ignorando a tecla enter e deixando o buffer limpo. Faça a prova e me conte como foi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×