Ordinamento record tramite puntatori

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
EmanueleFerrini
Prode Principiante
Messaggi: 8
Iscrizione: mercoledì 2 dicembre 2015, 16:30
Desktop: Mate
Sesso: Maschile
Località: Roma

Ordinamento record tramite puntatori

Messaggio da EmanueleFerrini »

Salve a tutti, questo programma dovrebbe ordinare un vettore di record utilizzando i puntatori. Il problema si viene a creare quando mi si avvia l'input del programma. Mi spiego meglio, il programma dovrebbe prendere in input tre campi(nome,stipendio e età), ma dopo che ho indicato il numero di dipendenti che voglio caricare mi salta l'input del nome e passa subito all'input dello stipendio, rendendo ovviamente impossibile l'ordinamento alfabetico. Ho provato a sostituire la sintassi per l'input di una stringa (getline) con una semplice cin, l'input è si avvia bene ma il programma si blocca ed esce questo messaggio di errore "terminate called after throwing an instance of 'std::length_error'what(): basic_string::_M_createAborted (core dumped)". Probabilmente sarà una stupidaggine ma chiedo comunque un aiuto.

Codice: Seleziona tutto

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

struct dipendente
{
	string nome;
	int stipendio;
	int eta;
};

struct dipendente azienda[30];

int main()
{
	dipendente *indirizzi[30];
	string nome;
	int card,flag,pos;
	string scambio;
	cout<<"Inserisci numero dipendenti:"<<endl;
	cin>>card;
	
	
	//input
	cout<<"####Credenziali dipendente####"<<endl;
	for(int i=0;i<card;i++)
	   {
		 cout<<"Inserire nome:"<<endl;
		 getline(cin,azienda[i].nome);
		 cout<<"Inserisci stipendio:"<<endl;
		 cin>>azienda[i].stipendio;
		 cout<<"Inserisci eta':"<<endl;
		 cin>>azienda[i].eta;
		 indirizzi[i]=&azienda[i];
	   }
	   
	//ordinamento
	do
	  {
	   flag=1;
	   for(int i=0;i<card;i++)
	      {
		   if(azienda[i].nome>azienda[i+1].nome)
		     {
			  scambio=(*indirizzi[i]).nome;
			  (*indirizzi[i]).nome=(*indirizzi[i+1]).nome;
			  (*indirizzi[i+1]).nome=scambio;
			  flag=0;
			  pos=i+1;
			 }
		  }
	   card=pos;
	  }
	while(flag==0);
	
	//output
	cout<<"Elenco ordinato per nome:"<<endl;
	for(int i=0;i<card;i++)
	   {
		
		cout<<"Dipendente numero "<<i+1<<endl;
		cout<<"Nome: "<<(*indirizzi[i]).nome;
		cout<<"Stipendio: "<<(*indirizzi[i]).stipendio;
		cout<<"Eta': "<<(*indirizzi[i]).eta;
	   }
	   
	system("PAUSE");
	return 0;
}


"L’unico modo che ho per proteggermi è non mostrare mai il mio codice sorgente. Mi devo isolare. Devo creare il mio labirinto freddo."
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti