Forum - C/C++
- utilizzare cin.get o cin.getline?
Postese15 (Normal User)
Newbie
Messaggi: 3
Iscritto: 05/02/2011
ciao a tutti ragazzi questo è la mia prima discussione.
passiamo al problema...devo fare un programma che utilizza degli struct però nel campo nome non riesco a inserire parole separate da uno spazio...potete aiutarmi?
vi posto il file sorgente scritto da me.
Codice sorgente - presumibilmente C++
struct Azienda{
char cognome[ 32] ;
char nome[ 32] ;
char reparto[ 4] ;
int anno;
int matricola;
} ;
#include <cstdlib>
#include <iostream>
#include "modulo.h"
using namespace std;
void leggi( int n,Azienda s[ ] ) ;
void nuovo( int n,Azienda s[ ] ,Azienda s1[ ] ,int copy,int a1,int a2,int & cont) ;
void ordina( int copy,Azienda s1[ ] ) ;
void stampa( int copy,Azienda s[ ] ) ;
/*
*
*/
int main( int argc, char ** argv) {
int n,a1,a2,copy,cont;
Azienda* s;
Azienda* s1;
cout << "inserire numero di dipendenti: " ;
cin >> n;
s= new Azienda[ n] ;
if ( s== NULL ) {
cout << "ERRORE" ;
return - 1 ;
}
leggi( n,s) ;
cout << "inserire primo anno: " ; cin >> a1;
cout << "inserire secondo anno: " ; cin >> a2;
s1= new Azienda[ n] ;
if ( s1== NULL ) {
cout << "ERRORE" ;
return - 1 ;
}
nuovo( n,s,s1,copy,a1,a2,cont) ;
ordina( cont,s1) ;
stampa( cont,s1) ;
delete [ ] s;
delete [ ] s1;
return 0 ;
}
void leggi( int n,Azienda s[ ] ) {
for ( int i= 0 ; i< n; i++ ) {
cout << "dipendente" << i+ 1 << ": " ;
cout << "\n inserire cognome: " ; cin >> s[ i] .cognome ;
cout << "inserire nome: " ; cin >> s[ i] .nome ;
cout << "inserire reparto(amm,prd,ric,mrk): " ; cin >> s[ i] .reparto ;
cout << "inserire anno assunzione: " ; cin >> s[ i] .anno ;
cout << "inserire matricola: " ; cin >> s[ i] .matricola ;
}
}
void nuovo( int n,Azienda s[ ] ,Azienda s1[ ] ,int copy,int a1,int a2,int & cont) {
copy= 0 ;
cont= 0 ;
for ( int i= 0 ; i< n; i++ )
if ( s[ i] .anno > a1 && s[ i] .anno < a2) {
s1[ copy] = s[ i] ;
copy++ ;
cont++ ;
}
}
void ordina( int copy,Azienda s1[ ] ) {
for ( int t= 0 ; t< copy; t++ )
for ( int i= copy- 1 ; i> t; i-- )
if ( s1[ i] .matricola < s1[ i- 1] .matricola )
swap( s1[ i] .matricola , s1[ i- 1] .matricola ) ;
}
void stampa( int copy,Azienda s[ ] ) {
for ( int i= 0 ; i< copy; i++ ) {
cout << "\n dipendente" << i+ 1 << ":\n " << s[ i] .cognome [ 0 ] << s[ i] .nome [ 0 ] << "\n " ;
cout << "reparto: " << s[ i] .reparto << "\n " ;
cout << "anno di assunzione: " << s[ i] .anno ;
cout << "\n matricola: " << s[ i] .matricola << "\n " ;
}
}
Ultima modifica effettuata da Postese15 il 05/02/2011 alle 12:09
HeDo (Founder Member )
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
per chiedere parole con lo spazio devi per forza ricorrere a getline
Postese15 (Normal User)
Newbie
Messaggi: 3
Iscritto: 05/02/2011
però se imposto un valore,ad esempio 20,fino a quando non inserisco vendi caratterie/o spazi non mi funziona
HeDo (Founder Member )
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
Postato originariamente da Postese15 :
però se imposto un valore,ad esempio 20,fino a quando non inserisco vendi caratterie/o spazi non mi funziona
il terminatore a quel punto diventa il ritorno a capo
Postese15 (Normal User)
Newbie
Messaggi: 3
Iscritto: 05/02/2011
ho provato ma non mi funziona perchè mi salta l inserimento del campo successivo...come potrei fare? grazie in anticipo
()
Newbie
Messaggi:
Iscritto:
metti un cin.ignore appena prima dell'input successivo, per far si che si pulisca il buffer di tastiera...