Programmazione Procedurale in Linguaggio C++

Documenti analoghi
ERRORI DI PROGRAMMAZIONE INDICE

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Informatica Applicata

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Assegnazione di una variabile

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Il primo programma C++

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale

Programmazione Orientata agli Oggetti in Linguaggio Java

L AMBIENTE CODE BLOCKS E L IO

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Il linguaggio C. Notate che...

Lezione 6 Introduzione al C++ Mauro Piccolo

Programmazione Procedurale in Linguaggio C++

Introduzione al C++ Parte 2

Modularizzazione del software

C++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW

Programmazione Orientata agli Oggetti in Linguaggio Java

Il linguaggio C Strutture

Dati due punti sul piano calcolare la loro distanza

Capitolo 5 - Funzioni

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Laboratorio di programmazione

Istruzioni Condizionali

Linguaggio C: introduzione

Le funzioni: la dichiarazione

C funzioni à scope di variabili

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

Transcript:

Programmazione Procedurale in Linguaggio C++ versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Elementi di Base: Conclusioni >> Di seguito alcuni errori sintattici molto frequenti In particolare punti e virgola mancanti Statement missing ; costanti o variabili non dichiarate Undefined symbol errori nella scelta degli identificatori 2

Elementi di Base: Conclusioni >> In caso di codice scorretto sintatticamente il compilatore restituisce messaggi per segnalare gli errori Esempio: errore frequente punto e virgola mancante Error E2379 prova.cpp 16: Statement missing ; in function main() *** 1 errors in Compile *** codice di errore nome del file numero di riga descrizione dell errore (punto e virgola mancante) 3 Elementi di Base: Conclusioni >> Un altro errore frequente utilizzare una variabile non dichiarata es: raggio void main() const float pigreco = 3.14; float cerchio, circonf; cout << Immetti la lungh. del raggio << endl; cin >> raggio; Error E2451 cerchio.cpp 14: Undefined symbol 'raggio' in function main() 4

Elementi di Base: Conclusioni >> Errori nella scelta degli identificatori es: spazi es: int lung raggio; Error E2141 prova.cpp 4: Declaration syntax error in function main() lung raggio = 1; Error E2379 prova.cpp 6: Statement missing ; in function main() 5 Elementi di Base: Conclusioni >> Errori nella scelta degli identificatori altra fonte di errori sono i caratteri speciali (codice ASCII superiore a 127) es: int capcittà; Error E2206 prova.cpp 5: Illegal character 'Ó' (0xe0) in function main() 6

Elementi di Base: Conclusioni >> NOTA BENE purtroppo non sempre i numeri di linea sono affidabili In generale l errore può essere alla linea segnalata oppure in una delle linee precedenti Inoltre a volte un errore sintattico ne può generare molti altri 7 Elementi di Base: Conclusioni >> : Esempio parentesi mancante // cerchioerrori.cpp #include <iostream.h> void main() const float pigreco = 3.14; int raggio; float cerchio, circonf; cout << Immetti la lungh. del raggio << endl; cout << (deve essere un numero intero) << endl; cin >> raggio; cerchio = raggio * raggio * pigreco; circonf = 2 * pigreco * raggio; cout << La circonferenza misura: << circonf << endl; cout << Il cerchio ha superficie: << cerchio << endl; 8

Elementi di Base: Conclusioni >> >bcc32 cerchioerrori.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland cerchioerrori.cpp: Error E2310 cerchioerrori.cpp 7: Onlymember functions may be 'const' or 'volatile' Error E2141 cerchioerrori.cpp 7: Declaration syntax error Error E2141 cerchioerrori.cpp 12: Declaration syntax error Error E2015 cerchioerrori.cpp 13: Ambiguity between 'cout' and 'std::cout' Error E2238 cerchioerrori.cpp 13: Multiple declaration for 'cout' Error E2344 cerchioerrori.cpp 12: Earlierdeclaration of 'cout' Error E2141 cerchioerrori.cpp 13: Declaration syntax error Error E2141 cerchioerrori.cpp 14: Declaration syntax error Error E2303 cerchioerrori.cpp 15: Type name expected Error E2238 cerchioerrori.cpp 15: Multiple declaration for 'cerchio' Error E2344 cerchioerrori.cpp 9: Earlier declaration of 'cerchio' Error E2451 cerchioerrori.cpp 15: Undefined symbol 'pigreco' Error E2303 cerchioerrori.cpp 16: Type name expected Error E2238 cerchioerrori.cpp 16: Multiple declaration for 'circonf' Error E2344 cerchioerrori.cpp 9: Earlier declaration of 'circonf' Error E2015 cerchioerrori.cpp 17: Ambiguity between 'cout' and 'std::cout' Error E2238 cerchioerrori.cpp 17: Multiple declaration for 'cout' Error E2344 cerchioerrori.cpp 13: Earlierdeclaration of 'cout' Error E2141 cerchioerrori.cpp 17: Declaration syntax error Error E2015 cerchioerrori.cpp 18: Ambiguity between 'cout' and 'std::cout' Error E2238 cerchioerrori.cpp 18: Multiple declaration for 'cout' Error E2344 cerchioerrori.cpp 17: Earlierdeclaration of 'cout' Error E2141 cerchioerrori.cpp 18: Declaration syntax error Error E2190 cerchioerrori.cpp 19: Unexpected *** 24 errors in Compile *** 9 Elementi di Base: Conclusioni >> Di conseguenza, valgono le regole a) analizzare gli errori sintattici uno ad uno b) dopo aver eliminato ciascun errore, ricompilare e verificare gli ulteriori errori c) per eliminare un errore, cercare di capire il messaggio di errore d) ispezionare subito la linea segnalata e) successivamente ispezionare le linee precedenti alla caccia di possibili cause 10

Strutture di Controllo: Conclusioni >> Un errore sintattico frequente parentesi graffe mancanti per i blocchi delle istruzioni di controllo Due casi entrambe le parentesi mancanti solo la parentesi finale è mancante 11 Strutture di Controllo: Conclusioni >> Un Esempio: Media con For #include <iostream.h> manca la parentesi di chiusura void main() { float voto, sommavoti, media; mancano le parentesi int numeroesami, i; del I blocco cout << "Quanti esami hai sostenuto?" << endl; cin >> numeroesami; sommavoti = 0.0; for (i=0; i<numeroesami; i++) { cout << "Immetti il voto di un esame" << endl; cin >> voto; sommavoti += voto; if (numeroesami > 0) media = sommavoti/numeroesami; cout << "La media vale: " << media << endl; else { cout << "Non hai fornito nessun voto" << endl; 12

Strutture di Controllo: Conclusioni >> Nel primo caso (parentesi di chiusura) il compilatore considera il blocco aperto fino alla fine del file e alla fine del file segnala l errore Error E2134 mediafor.cpp 23: Compound statement missing in function main() Blocco di istruzioni senza parentesi chiusa Nel secondo caso (parentesi dell if) il compilatore considera il blocco fatto di una sola istruzione; errore quando incontra else Error E2054 mediafor.cpp 20: Misplaced else in function main() Else fuori posto 13 Sottoprogrammi: Conclusioni >> Alcuni errori frequenti Errori sintattici errori nelle chiamate errori nella definizione e nei prototipi Errori logici errori nell uso delle procedure e delle funzioni errori nell uso dei parametri 14

Sottoprogrammi: Conclusioni >> Errori Sintattici Nome scorretto del sottoprogramma es: d = discriminate(a1, b1, c1); Error E2268 prova.cpp 10: Call to undefined function 'discriminate' in function main() Errore nel numero dei parametri es: d = discriminante(a1, b1); Error E2193 prova.cpp 10: Too few parameters in call to 'discriminante(float,float,float)' in function main() 15 Sottoprogrammi: Conclusioni >> Errori Sintattici Errore nel tipo dei parametri es: float a1, b1; string c1; d = discriminante(a1, b1, c1); Error E2034 prova.cpp 10: Cannot convert 'char *' to 'float' in function main() Error E2342 prova.cpp 10: Type mismatch in parameter 'c' (wanted 'float', got 'char *') in function main() 16

Sottoprogrammi: Conclusioni >> Errori Sintattici Attenzione utilizzando i prototipi, a volte si verificano errori se viene modificato il sottoprogramma e non il prototipo Esempio: void sceltamenu(int &scelta); void main() {... int schermosceltamenu(string nome) {... prototipo e intestazione sono disallineati 17 Sottoprogrammi: Conclusioni >> Errori Sintattici Caso n.1 se le chiamate rispecchiano il prototipo, la compilazione si verifica senza problemi ma c è un errore a tempo di collegamento Error: Unresolved external sceltamenu(int&)' referenced from E:\TMP\PROVA.OBJ Caso n.2 se le chiamate rispecchiano l intestazione Error E2268 prova.cpp 10: Call to undefined function schermosceltamenu' in function main() 18

Sottoprogrammi: Conclusioni >> Errori Logici Errore principale utilizzare le funzioni come se fossero procedure es: void main() { float a1, b1, c1; leggiequazione(a1, b1, c1); discriminante(a1, b1, c1);... questo tipo di chiamata non ha senso: non viene utilizzato il valore della funzione 19 Sottoprogrammi: Sintassi e Semantica >> Linee Guida per i Parametri Linee Guida per la Scelta dei Param. Parametri di un sottoprogramma in sintesi tutti i dati che il sottoprogramma ha bisogno di conoscere per funzionare (par. standard) tutti i dati che il sottoprogramma deve modificare (par. per riferimento) Sulla base di questo è possibile ottenere delle linee guida su come scegliere i parametri 20

Sottoprogrammi: Sintassi e Semantica >> Linee Guida per i Parametri Linee Guida per la Scelta dei Param. Per cominciare chiarire bene la funzione del sottoprogramma in esame quale problema deve risolvere su quali dati deve operare che risultati deve produrre 21 Sottoprogrammi: Sintassi e Semantica >> Linee Guida per i Parametri Linee Guida per la Scelta dei Param. Parametri della tipologia 1 dati che il sottoprog. deve conoscere chiarire quali sono i dati che il sottoprog. deve conoscere per funzionare e che devono provenire dal modulo chiamante Esempio n. 1 di dati da conoscere dati da stampare sullo schermo int schermomenuprincipale(string nome); 22

Sottoprogrammi: Sintassi e Semantica >> Linee Guida per i Parametri Linee Guida per la Scelta dei Param. Esempio n. 2 di dati da conoscere dati da utilizzare per effettuare calcoli float discriminante(float a, float b, float c); Esempio n. 3 di dati da conoscere dati da utilizzare per effettuare verifiche void schermoleggipuntatadadi ( int postadisponibile, int &puntata) postadisponibile serve a convalidare il valore della puntata letta da tastiera 23 Sottoprogrammi: Sintassi e Semantica >> Linee Guida per i Parametri Linee Guida per la Scelta dei Param. Esempio n. 4 di dati da conoscere dati da passare ad altri sottoprogrammi void gioca (string nome); in questo caso, nella morra cinese gioca non utilizza direttamente il nome ma è necessario che lo conosca per passarlo ad altri sottoprogrammi (gli schermi successivi) 24

Sottoprogrammi: Sintassi e Semantica >> Linee Guida per i Parametri Linee Guida per la Scelta dei Param. Parametri della tipologia 2 dati che il sottoprog. deve modificare e le cui modifiche devono essere visibili all esterno (dati utilizzati in altri moduli) Esempio n.1 di dati da modificare dati il cui valore viene letto da un flusso di ingresso void leggiequazione(float &a, float &b, float &c); 25 Sottoprogrammi: Sintassi e Semantica >> Linee Guida per i Parametri Linee Guida per la Scelta dei Param. Esempio n.2 di dati da modificare dati che il sottoprogramma deve modificare a seconda della logica applicativa void nuovapartita(string nome, int& vittoriecomputer, int& vittoriegiocatore); Attenzione un dato può ricadere anche in entrambe le tipologie (da conoscere e da modificare) 26

Sottoprogrammi: Sintassi e Semantica >> Errori frequenti nell utilizzo dei parametri specificare un numero troppo alto di parametri per un sottoprogramma >> utilizzo di parametri inutili omettere la & per parametri che devono essere per riferimento >> parametro standard al posto di parametro per riferimento 27 Sottoprogrammi: Sintassi e Semantica >> Sulla base di quanto detto è opportuno utilizzare un parametro esclusivamente se è indispensabile bisogna evitare parametri inutili Utilizzo di parametri inutili complicano la lettura del programma aumentano il livello di accoppiamento facilmente introducono errori 28

Sottoprogrammi: Sintassi e Semantica >> Esempio di Parametro Inutile float discriminante (float a, float b, float c float d) { d = b*b-4*a*c; return d; void main() { d dovrebbe essere float a1, b1, c1; una variabile locale float a2, b2, c2; float d;... if (discriminante(a1, b1, c1, d) >= 0... 29 Sottoprogrammi: Sintassi e Semantica >> Esempio di Parametro Inutile void nuovamano( string nome, int& punteggiocomputer, int& punteggiogiocatore, int& pareggi int giocatacomputer ) { int giocatagiocatore; int esito; giocatacomputer = generagiocatacomputer(); giocatagiocatore = schermomenumano(nome); esito = controllaesito(giocatacomputer, giocatagiocatore); schermoesitomano(nome,esito,giocatacomputer,giocatagiocatore); if (esito == 1) punteggiocomputer++; else if (esito == 2) punteggiogiocatore++; else pareggi++; return; giocatacomputer dovrebbe essere una variabile locale 30

Sottoprogrammi: Sintassi e Semantica >> Omettere la & ATTENZIONE: grave errore frequente perchè omettere la & è un errore? perchè il parametro viene considerato standard (per valore) le modifiche vengono fatte direttamente sullo spazio di memoria del parametro al termine la memoria viene rilasciata e si perde traccia delle modifiche 31 Sottoprogrammi: Sintassi e Semantica >> Esempio di Errore le1. void leggiequazione (float a, float &b, float &c) { le2. cout << Coefficienti? "; le3. cin >> a; le4. cin >> b; le5. cin >> c; le6. return; le7. m1. void main() { m2. float a1, b1, c1; m3. float a2, b2, c2; m4. float x1, y1, x2, y2; m5. leggiequazione(a1, b1, c1); m6. leggiequazione(a2, b2, c2); m7. if (...) #100 a1-34256 #101 b1 xxx 5 #102 c1 xxx 2 #103 a2 xxx #104 b2 xxx #105 c2 xxx #106 x1 xxx #107 y1 xxx #108 x2 xxx #109 y2 xxx #110 a -34256 xxx 2 #111 b #101 xxx #112 c #102 xxx Coefficienti? 2 5 2 32

Sottoprogrammi: Sintassi e Semantica >> Viceversa utilizzare una & dove non serve è meno grave (non altera il funzionamento) In generale tutti i parametri potrebbero essere per riferimento (es: FORTRAN) ma utilizzarli dove non serve è comunque un errore (rende meno chiaro il funzionamento del programma) 33 Tipi Strutturati: Conclusioni >> L errore più frequente con gli array sconfinamento ATTENZIONE alla gestione degli indici Un altro errore grave provare a dichiarare un array usando come dimensione una variabile es: int i; float temperature[i]; Error E2313 prova.cpp 4: Constant expression required in function main() 34

Tipi Strutturati: Conclusioni >> Passaggio dei parametri gli array sono sempre parametri standard ma sono comunque modificabili non bisogna mai specificare la & commerciale es: void leggi(float &temperature[n]); Error E2023 temperature1.cpp 5: Array of references is not allowed Error E2034 temperature1.cpp 18: Cannot convert 'float *' to 'float & *' in function main() 35 Tipi Strutturati: Conclusioni >> L errore più frequente con i record punto e virgola mancante dopo la struct Esempio struct studente {... // senza ; void main() {... Error E2176 prova.cpp 7: Too many types in declaration Error E2111 prova.cpp 7: Type 'studente' may not be defined here 36

Strutture di Dati: Conclusioni >> Errori frequenti punto e virgola mancante dopo il modello della lista gestione scorretta dell indicatore di riempimento sconfinamenti nella scansione della lista omettere o utilizzare scorrettamente le istruzioni cin.ignore 37 Strutture di Dati: Conclusioni >> Punto e Virgola Mancante Lista rappresentazione con record e array quindi la lista è un record uno o più modelli di record uno o più punto e virgola In assenza al solito errore sintattico 38

Strutture di Dati: Conclusioni >> Gestione Scorretta dell Indicatore Inserimenti e cancellazioni oltre ad aggiungere/togliere gli elementi all array è necessario modificare l indicatore In caso di inserimenti l.indicatore++ In caso di cancellazioni l.indicatore Altrimenti è come se non fosse successo nulla >> gestionetemperature1.cpp 39 Strutture di Dati: Conclusioni >> Sconfinamenti Alcune operazioni possono richiedere scansioni non standard della lista es: cancellazioni: è necessario spostare in alto gli elementi es: verifica di condizioni: può essere necessario analizzare più elem. consecutivi (es: trovare tre valori negativi consecutivi) 40

Strutture di Dati: Conclusioni >> Sconfinamenti In questi casi è indispensabile analizzare con cura le condizioni sul valore finale nei cicli Cancellazione in posizione pos for (i = pos; i < l.indicatore - 1; i++) { l.valori[i] = l.valori[i+1]; l.indicatore--; esito = true; 41 Strutture di Dati: Conclusioni >> Sconfinamenti Verifica su tre elementi consecutivi trovato = false; i = 0; while (!trovato && i < l.indicatore - 2) { if (l.valori[i] < 0 && l.valori[i+1] < 0 && l.valori[i+2] < 0) { trovato = true; i++; 42

Strutture di Dati: Conclusioni >> Utilizzo della ignore Lista di record tipicamente informazioni di tipo diverso in ogni elemento se ci sono stringhe, bisogna alternare input non formattato (getline) e input formattato In questi casi è indispensabile posizionare correttamente le istruzioni cin.ignore() per ripulire lo std. input 43 Strutture di Dati: Conclusioni >> Utilizzo della ignore Regola generale serve ripulire il flusso di ingresso prima di ogni getline che è preceduta da una cin >> Sottigliezze attenzione ai cicli (la lettura delle stringhe iniziali di un elemento può seguire la lettura dei numeri finali del precedente) attenzione alla lettura dell indicatore 44

Strutture di Dati: Conclusioni >> Utilizzo della ignore Esempio partite di calcio alcuni attributi sono stringhe (input non formattato) altri attributi richiedono l input formattato struct partita { string squadracasa, squadratrasferta; ; int goalcasa, goaltrasferta; char segno; 45 Strutture di Dati: Conclusioni >> Utilizzo della ignore Caso I array di partite di dimensione fissata in questo caso non viene utilizzata una lista Di conseguenza void main() { partita partite[n]; leggipartite(partite); calcolasegni(partite); stampapartite(partite); >> partite1.cpp 46

Strutture di Dati: Conclusioni >> Utilizzo della ignore void leggipartite(partita partite[n]){ int i; for (i = 0; i < N; i++) { leggipartita(partite[i]); return; void leggipartita(partita &p){ cout << "\nimmetti i dati della partita\n"; cout << "Squadra in casa : "; getline(cin, p.squadracasa); cout << "Squadra in trasferta : "; getline(cin, p.squadratrasferta); cout << "Goal squadra in casa : "; cin >> p.goalcasa; cout << "Goal squadra in trasferta: "; cin >> p.goaltrasferta; cin.ignore(); return; dopo la lettura dei goaltrasferta di partite[i] pulisco il flusso prima della lettura di squadracasa di partite[i+1] ATTENZIONE: in qualsiasi altra posizione la cin.ignore() sarebbe un errore (es: all inizio) 47 Strutture di Dati: Conclusioni >> Utilizzo della ignore Caso II lista di partite Di conseguenza const int MAXDIM = 100; struct partita { string squadracasa, squadratrasferta; int goalcasa, goaltrasferta; char segno; ; struct listapartite { int indicatore; partita partite[maxdim]; ; >> partite3.cpp 48

Strutture di Dati: Conclusioni >> Utilizzo della ignore void leggipartite(listapartite &l){ int i; leggiindicatore(l.indicatore); cin.ignore(); for (i = 0; i < l.indicatore; i++) { leggipartita(l.partite[i]); return; void leggipartita(partita &p){ cout << "\nimmetti i dati della partita\n"; cout << "Squadra in casa : "; getline(cin, p.squadracasa); cout << "Squadra in trasferta : "; getline(cin, p.squadratrasferta); cout << "Goal squadra in casa : "; cin >> p.goalcasa; cout << "Goal squadra in trasferta: "; cin >> p.goaltrasferta; cin.ignore(); return; 49 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copiadella licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 50