Struct

di il
8 risposte

Struct

Sono arrivato alle struct ho provato a scrivere questo programma ma non va oltre il primo inserimento, dove ho sbagliato?

Il programma consiste nell'inserire 5 film (titolo e anno) e successivamente stampare a video i 5 film inseriti
#include <iostream.h>
#include <stdlib.h>

#define N_FILM 5

struct film_t{
char titolo [50];
int anno;
} films [N_FILM];

void stampaFilm (film_t film);

int main ()
{
int n;
for (n=0; n<N_FILM; n++)
{
cout << "Dammi il titolo: ";
cin.getline (films[n].titolo,50);
cout << "Dammi l'anno: ";
cin >> films[n].anno;
}
cout << "\nHai inserito i seguenti film:\n";
for (n=0; n<N_FILM; n++)
stampaFilm (films[n]);
system ("PAUSE");
return 0;
}

void stampaFilm (film_t film)
{
cout << film.titolo;
cout << " (" << film.anno << ")\n";
}

8 Risposte

  • Re: Struct

    Cambia la definizione della funzione così:
    
    void stampaFilm (film_t &film);
    
    dai uno sguardo alla sezione: passaggio variabile per riferimento.
  • Re: Struct

    Allora ho corretto come suggerivi ma non funziona, accetta il primo inserimento dopo mi chiede direttamente l'anno del secondo.. io ho provato a cambiare questa riga
    cin.getline (films[n].titolo,50);
    con questa qui:
    cin >> films[n].titolo;
    e mi accetta tutte e 5 gli inserimenti solo se inserisco un solo nome
    es. se scrivo "inception" tutt ok, se provo a scrivere "shutter island" non mi permette di procedere con gli altri inserimenti.
  • Re: Struct

    
    #include <iostream>
    #include<limits>
    
    using namespace std;
    
    #define N_FILM 5
    
    struct film_t{
    char titolo [50];
    int anno;
    } films [N_FILM];
    
    void stampaFilm (film_t &film);
    
    int main ()
    {
    	int n;
    	for (n=0; n<N_FILM; n++)
    	{
    		cout << "Dammi il titolo: ";
    		cin.getline (films[n].titolo,50);
    		cout << "Dammi l'anno: ";	
    		cin >> films[n].anno;
    		cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
    	}
    	cout << "\nHai inserito i seguenti film:\n";
    	for (n=0; n<N_FILM; n++)
    		stampaFilm (films[n]);
    	system ("PAUSE");
    	return 0;
    }
    
    void stampaFilm (film_t &film)
    {
    	cout << film.titolo;
    	cout << " (" << film.anno << ")\n";
    }
    
    Bisogna pulire l'input dopo l'inserimento.
    Quì c'è lo stesso problema e la soluzione.
    https://www.iprogrammatori.it/forum-programmazione/cplusplus/stringhe-t10411.html
  • Re: Struct

    No scusa non mi è chiaro
    ho aggiunto queste due righe
    cin.getline (films[n].titolo,50);
    std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
    e #include <limits>

    ora mi permette di scrivere quante parole voglio ma quando stampa a video ho solo il primo inserimento degli altri solo la data.. dove sto sbagliando?


    edit. ripeto che se aggiungo al posto del "getline" questo:
    cin >> films[n].titolo;
    riesco a fare tutti e 5 gli inserimenti!! solo che se provo a scrivere un film il cui nome contenga due parole, si ferma tutto! posto degli screen
    http://i52.tinypic.com/16gihpt.pn
    http://i54.tinypic.com/4vjoex.pn
  • Re: Struct

    Non saprei. Il codice che ti ho postato è leggermente diverso dal tuo ma io vedo tutti e 5 i film. Ovviamente non devo uscire fuori dai 50 caratteri per film visto che hai limitato la larghezza stringa a 50.
  • Re: Struct

    Bah non saprei dopo riguardo il codice e ti faccio sapere grazie per l'aiuto =)
  • Re: Struct

    Togli Dev-C++ e metti CodeBLocks oppure VisualStudio Express (tutti e due gratuiti).
    Allegati:
    7532_fda606a5771b774b5bb219217a8be970.jpg
    7532_fda606a5771b774b5bb219217a8be970.jpg
  • Re: Struct

    Oook ora funziona, ho sostituito la prima parte con quello che mi hai postato tu, poi
    {
    cout << "Dammi il titolo: ";
    cin.getline (films[n].titolo,50);
    cout << "Dammi l'anno: ";
    cin >> films[n].anno;
    std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
    }
    prima invece std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n'); lo inserivo prp nel mezzo, subito dopo il cin.getline!

    detto ciò sono iscritto a ingegneria informatica e per l'esame dovrò usare dev, mi segno comunque i programmi che mi hai consigliato magari quando ho un pò di tempo libero li provo, anzi sapresti indicarmene uno buono per linux?

    ti ringrazio per la disponibilità alla prossima che temo sarà a breve XD
Devi accedere o registrarti per scrivere nel forum
8 risposte