Ir ao conteúdo
  • Cadastre-se

Listas em c++


Visitante

Posts recomendados

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

 

Link para o comentário
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...

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!