Vettore con diversi tipi

di il
12 risposte

Vettore con diversi tipi

Salve a tutti, sono alle prese con un esercizio che chiede di progettare un vettore che contenga il nome di 16 nuotatori, l'età, e il tempo ottenuto in vasca. Il mio dubbio era questo, come posso fare a mettere tutte queste informazioni in un unico vettore, dato che le variabili sono di tipo diverso?ad esempio il nome è string, l'età int, e il tempo float. Stavo pensando di dichiarare il vettore come string, in modo tale che leggesse i numeri come stringa e li accettasse ma non penso sia la soluzione migliore. Se qualcuno saprebbe consigliarmi soluzioni più efficienti gliene sarei grato.

12 Risposte

  • Re: Vettore con diversi tipi

    Le strutture sai cosa sono?
  • Re: Vettore con diversi tipi

    oregon ha scritto:


    Le strutture sai cosa sono?
    Facendo esercizi con i puntatori me ne ero completamente dimenticato grazie mille mi hai sbloccato!
  • Re: Vettore con diversi tipi

    Ho scritto il codice utilizzando le struct, ma adesso ho un altro problema. Per inserire le stringhe ho utilizzato la funzione gets(), che ho preso dal mio libro ma questa mi crea qualche problema, intanto a quanto ho capito questa funzione con le nuovi versioni di c++ non va, inoltre mi fa inserire solamente una stringa. Questo è quello che ho scritto io per il momento.
    
    #include<iostream>
    using namespace std;
    
    struct nuotatori
    {
      char nome[20];
      unsigned int eta;
      float tempo;
    
    };
    
    
    
    int main ()
    {
    
      int totale = 0;
      struct nuotatori dati[100];
    
    
      for (register int i = 0; i < 16; i++)
        {
          cout << "inserire il nome del nuotatori" << endl;
          gets (dati[totale].nome);
          cout << "inserisci la sua eta'" << endl;
          cin >> dati[totale].eta;
          cout << "inserisci il suo tempo " << endl;
          cin >> dati[totale].tempo;
          i++;
          totale++;
        }
    
    
    
      return 0;
    }
    
    
    
  • Re: Vettore con diversi tipi

    [] gets() è stata rimossa nello standard C++14.
    Puoi sostituirla con fgets()
    https://en.cppreference.com/w/cpp/io/c/fget
    nel tuo caso:
    
    fgets (dati[totale].nome, 20, stdin);
    
    Giusto per informazione, anche la workd key register è stata eliminata (i compilatori recenti non ne tengono conto) e il suo uso è stato riservato a futuri scopi.

    P.S.
    Ma più che fgets() puoi usare:
    
    cin.getline(dati[totale].nome, 20);
    
    https://en.cppreference.com/w/cpp/io/basic_istream/getline
  • Re: Vettore con diversi tipi

    E c'è un errore ... aumenti i due volte.

    In realtà non si capisce perché non utilizzi i al posto di totale (che non serve) e perché prepari 100 elementi se ne usi 16. Quindi
    
    
    struct nuotatori dati[16];
    
      for (int i = 0; i < 16; i++)
        {
          cout << "inserire il nome del nuotatori" << endl;
          cin.getline(dati[i].nome, 20);
          cout << "inserisci la sua eta'" << endl;
          cin >> dati[i].eta;
          cout << "inserisci il suo tempo " << endl;
          cin >> dati[i].tempo;
        }
    
  • Re: Vettore con diversi tipi

    shodan ha scritto:


    [] gets() è stata rimossa nello standard C++14.
    Puoi sostituirla con fgets()
    https://en.cppreference.com/w/cpp/io/c/fget
    nel tuo caso:
    
    fgets (dati[totale].nome, 20, stdin);
    
    Giusto per informazione, anche la workd key register è stata eliminata (i compilatori recenti non ne tengono conto) e il suo uso è stato riservato a futuri scopi.

    P.S.
    Ma più che fgets() puoi usare:
    
    cin.getline(dati[totale].nome, 20);
    
    https://en.cppreference.com/w/cpp/io/basic_istream/getline
    A quanto pare il libro che mi hanno consigliato è un po' vecchiotto, grazie mille per i consigli
  • Re: Vettore con diversi tipi

    oregon ha scritto:


    E c'è un errore ... aumenti i due volte.

    In realtà non si capisce perché non utilizzi i al posto di totale (che non serve) e perché prepari 100 elementi se ne usi 16. Quindi
    
    
    struct nuotatori dati[16];
    
      for (int i = 0; i < 16; i++)
        {
          cout << "inserire il nome del nuotatori" << endl;
          cin.getline(dati[i].nome, 20);
          cout << "inserisci la sua eta'" << endl;
          cin >> dati[i].eta;
          cout << "inserisci il suo tempo " << endl;
          cin >> dati[i].tempo;
        }
    
    Hai ragione oregon, inizialmente ne ho inizializzati 100 perchè come si dice dalle mie parti "meglio abbondare" dopo mi sono dimenticato di aggiustarlo, mi sono anche accorto che non ha senso utilizzare sia i che totale. Grazie mille come al solito sei stato utilissimo.
  • Re: Vettore con diversi tipi

    Ho seguito i vostri consigli ma c'è ancora il problema del nome, mi fa inserire la stringa solo una volta, dalla seconda volta skippa la parte dove devo inserire il nome e passa direttamente all'età, idee su come posso risolvere?
  • Re: Vettore con diversi tipi

    Usa
    
    cin.ignore(1000);
    
    https://en.cppreference.com/w/cpp/io/basic_istream/ignore
    dopo ogni acquisizione di stringa, altrimenti rimane lo \n nel buffer che causa lo skip dell'acquisizione successiva.
  • Re: Vettore con diversi tipi

    shodan ha scritto:


    Usa
    
    cin.ignore(1000);
    
    https://en.cppreference.com/w/cpp/io/basic_istream/ignore
    dopo ogni acquisizione di stringa, altrimenti rimane lo \n nel buffer che causa lo skip dell'acquisizione successiva.
    Ho provato, ma il programma va in loop
  • Re: Vettore con diversi tipi

    Pardon, modifica così:
    
      for (int i = 0; i < 16; i++)
        {
          cout << "inserire il nome del nuotatori" << endl;
          cin.getline(dati[i].nome, 20);
          cout << "inserisci la sua eta'" << endl;
          cin >> dati[i].eta;
          cout << "inserisci il suo tempo " << endl;
          cin >> dati[i].tempo;
          cin.ignore(1000, '\n')
        }
    
    
    
  • Re: Vettore con diversi tipi

    shodan ha scritto:


    Pardon, modifica così:
    
      for (int i = 0; i < 16; i++)
        {
          cout << "inserire il nome del nuotatori" << endl;
          cin.getline(dati[i].nome, 20);
          cout << "inserisci la sua eta'" << endl;
          cin >> dati[i].eta;
          cout << "inserisci il suo tempo " << endl;
          cin >> dati[i].tempo;
          cin.ignore(1000, '\n')
        }
    
    
    
    Perfetto adesso funziona, grazie mille e scusami per il tempo che ti ho fatto perdere
Devi accedere o registrarti per scrivere nel forum
12 risposte