Liste a puntatori, come passo un array?

di il
10 risposte

Liste a puntatori, come passo un array?

Ogni nodo della mia lista ha 3 campi : nome, età puntatore ad un nodo
v voglio che nome sia una array di char, ma non ci riesco, infatti con la seguente scrittura:
header
typedef char stringa [256];

struct Record;

typedef Record * L;

struct Record{
       stringa  nome[3] ;
       int  anni;
       L    next;
       };
       
void start(L&l);

void push(L&l,stringa nom,int anni);
func.cpp
void push(L&l,stringa nome,int anni){
    L p;
    p=new Record;
     p->nome=nome;//<-----------------------------------------------------------------
     p->anni=anni;
     p->next=l;
     l=p;
     }
Main
int main(int argc, char *argv[])
{   
    L l;
    int r,anni;
    stringa nom;

    
    
    start(l);
    cout<<"\nQuanti elementi vuoi inserire?\n";
    cin>>r;
    for (int i=0;i<r;i++){
        cout<<"\nInserire nome: ";
        cin>>nom;
        cout<<"\nEta' corrispondente :";
        cin>>anni;
    push( l, nom, anni);
    }
mi riporta che alla riga indicata(con <-------) c'è un incompatibilità tra i tipi char* e char*[3][256];

come faccio a far si che quel campo sia un array?

10 Risposte

  • Re: Liste a puntatori, come passo un array?

    stringa  nome[3] ;
    è un nome o un array di 3 stringhe lunghe 256 caratteri?
  • Re: Liste a puntatori, come passo un array?

    Ciao ^^ ,

    Sono un utente normale del forum ma penso di aver capito il problema.
    Hai detto che nel record hai bisogno di un campo array di char quindi , come giusto che sia , hai creato un tipo array di char con il comando:
     typedef char stringa[cardinalità]; 
    Ma quando vuoi dichiarare un oggetto del tipo stringa ti basta scrivere:
     stringa nome; 
    e non
     stringa nome[3];
    Poichè in quest' ultimo modo creeresti una matrice di char, cioè un array di array di char ( xD ) ed ecco perchè ti dice errore del tipo char*[3][256] , stai definendo una matrice 3x256 di char.

    Oltre questo , anche se scrivessi stringa nome; la riga
     p->nome= nome 
    non è corretta poichè per due oggetti di tipo stringa non è possibile avere un' assegnazione come tra due tipi atomici ( int , float , char etc.. ). Per facilitare l' assegnazione tra due stringhe esiste la libreria <string.h> nella quale esiste il comando strcpy(stringa,stringa); Quindi la riga deve essere cambiata in :
     strcpy(p->nome,nome); // Assegno la stringa nome in p->nome 
    Spero di essere stato chiaro e che ora funzioni il prog ^^

    Distinti Saluti,
    Alessandro
  • Re: Liste a puntatori, come passo un array?

    La definizione
    
     stringa  nome[3] ;
    
    l'ho fatta perché prevedo che un nome può avere al massimo 3 parole
    es: Leonardo de Martino, credo che il mio errore sia proprio nell'assegnazione con l'uguale, provvedo e ti faccio sapere
  • Re: Liste a puntatori, come passo un array?

    Ti ha risposto bennissimo Ale
  • Re: Liste a puntatori, come passo un array?

    Ok funziona, grazie ale

    però se dovessi inserire 3 nomi per stringa non posso fare come ho fatto io, sto cercando di capire come fare
  • Re: Liste a puntatori, come passo un array?

    cin>>nom;
    impara ad usare getline

    http://www.cplusplus.com/reference/string/getline

    Si ferma al new line e non allo spazio
    std::getline(cin,nom);
  • Re: Liste a puntatori, come passo un array?

    Sky so usare il get line, ma non devo fare in quell modo , ma creandomi array di stringhe, il prof ci fece vedere così, e così vuole che facciamo all'esame . . .
  • Re: Liste a puntatori, come passo un array?

    Ma se cin si ferma allo spazio come fai a capire se il nome è finito o meno? Ci fai vedere l'esempio del prof?
  • Re: Liste a puntatori, come passo un array?

    No, effettivamente non trovo da nessuna parte questa cosa, ma possibile che me la sono sognata?
    non abbiamo mai usato get line, non riesco a ricordarmi come facevo
  • Re: Liste a puntatori, come passo un array?

    CIao di nuovo ^^ ,

    Guarda mi sembra un pò strano che il professore vi metta un array di stringa, di norma i professori semplificano dei programmi per vedere l' algoritmo principale se è fatto bene ( esempio : Record formato da una stringa nome supponendo che ogni utente abbia un solo nome senza spazi ) altrimenti perchè non usare getline? utilizzare un' array di stringa ti complichi soltanto , certo è fattibile ( esempio: stringa nome[3]; quindi dovrai fare un ciclo for ed assegnare per ogni i-esima stringa la stringa riferita ) ma secondo me è solo tempo sprecato.

    Distinti Saluti,
    Alessandro
Devi accedere o registrarti per scrivere nel forum
10 risposte