Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206

    [C++]Problema con le struct

    Ave populus,
    ho questa funzione:
    codice:
    void visualizza() {
    	int i;
    	struct main_agenda agenda;
    
    	for (i=0;i<???;i++) {
    		cout << "Nome: " << ??? << endl;
    	}
    }
    che dovrebbe prendere i dati da questa struct:
    codice:
    struct main_agenda {
    	unsigned int id;
    	char nome[50];
    	char cognome[50];
    	unsigned int eta;
    	char email[150];
    	char tel[16];
    	char cell[16];
    };
    i problemi sono:
    1) in questa riga for (i=0;i<???;i++) che ci metto al posto di ??? ovvero come ottengo il numero degli elementi totali della struct?
    2) in questa riga cout << "Nome: " << ??? << endl; al posto di ??? che ci scrivo per recuperare il dato (ad esempio nome) dalla struct nella posizione corrente? Avevo pensato a: agenda[i].nome ma non vā, dice questo:
    error: no match for 'operator[]' in 'agenda[i]'

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Tu non hai mai dichiarato un array di elementi.

    Dovresti avere una dichiarazione del tipo

    struct main_agenda agenda[N];

    in cui N e' il numero massimo di elementi dell'agenda.

    Oppure dovresti lavorare con un puntatore alla struttura per gestire l'allocazione e la riallocazione della memoria relativa all'array quando serve. E quindi dovresti avere un qualcosa del tipo

    struct main_agenda *agenda;

    con la conseguente allocazione dell'area necessaria.

    In piu', l'array di strutture non deve essere locale alla funzione visualizza ma esterno e passato per puntatore alla funzione visualizza.

    Insomma ... il codice e' ampiamente da rivedere ...

  3. #3
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    Originariamente inviato da oregon
    In piu', l'array di strutture non deve essere locale alla funzione visualizza ma esterno e passato per puntatore alla funzione visualizza.
    la struct non č interna alla void ma esterna ad ogni funzione

  4. #4
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Ma avresti intenzione di fare una cosa del tipo

    for (ogni attributo A della struct) {
    cout << "Nome: " << A << endl;
    }

    ?

    Secondo me non ci sono istruzioni che te lo permettano.
    A meno che non dichiari tutti gli attributi come stringhe della stessa lunghezza e poi manipoli i puntatori, tipo
    (L č la lunghezza in comune)

    struct main_agenda * agenda;
    for(x = 0; x += lunghezza stringa; x++)
    {
    char buffer[L];
    copia L byte da agenda+x a agenda+x+L in buffer;
    stampa buffer;
    }

    Era questo che intendevi?

  5. #5
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    Originariamente inviato da newbie
    Ma avresti intenzione di fare una cosa del tipo

    for (ogni attributo A della struct) {
    cout << "Nome: " << A << endl;
    }

    ?

    Secondo me non ci sono istruzioni che te lo permettano.
    A meno che non dichiari tutti gli attributi come stringhe della stessa lunghezza e poi manipoli i puntatori, tipo
    (L č la lunghezza in comune)

    struct main_agenda * agenda;
    for(x = 0; x += lunghezza stringa; x++)
    {
    char buffer[L];
    copia L byte da agenda+x a agenda+x+L in buffer;
    stampa buffer;
    }

    Era questo che intendevi?
    premettendo che di C++ sono proprio come il tuo nick...

    volevo fare:
    - mettere tutti i dati che voglio nella struttura --> FATTO
    - visualizzare i dati storati nella struct (nome, cognome, eta ...) ciclicamente (fin tanto che č presente un altro elemento nella struct) --> FALLITO

    Mi son spiegato bene???


  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Originariamente inviato da Aki
    la struct non č interna alla void ma esterna ad ogni funzione
    Alla void? Intendi alla funzione ...

    Veramente, per come hai scritto la visualizza, la struct e' al suo interno ... e' locale. Se intendi utilizzarne una esterna, non devi utilizzarla al suo interno.

    Comunque, non ho capito se tu vuoi fare un elenco dei singoli campi e in questo caso non ti serve un ciclo, o un elenco dei dati di un array di strutture ...

  7. #7
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Non mi pare che in C prevista la scansone dei campi di una struct nel modo che hai pensato, per cui devi chiamare le voci una per una.
    Potresti creare una classe con un metodo apposta.
    ciao!

  8. #8
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    Originariamente inviato da oregon
    Veramente, per come hai scritto la visualizza, la struct e' al suo interno ... e' locale. Se intendi utilizzarne una esterna, non devi utilizzarla al suo interno.
    forse ho scritto male, intendevo che nel listato ci sono:
    - include vari e direttive del preprocessore
    - struct
    - funzione main e altre funzioni (compresa visualizza)

    Comunque, non ho capito se tu vuoi fare un elenco dei singoli campi e in questo caso non ti serve un ciclo, o un elenco dei dati di un array di strutture ...
    voglio solo farmi ritornare (finche ci sono elementi nella struct) i dati memorizzati precedentemente nella struttura (nome, cognome, eta ...)



  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Non lo puoi fare con la for ... non puoi enumerare i singoli campi in un ciclo, se ho capito bene quello che vuoi fare ...

    Devi scrivere

    cout << "Nome: " << agenda.nome << endl;
    cout << "Cognome: " << agenda.cognome << endl;

    e cosi' via ...

  10. #10
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Originariamente inviato da Aki
    premettendo che di C++ sono proprio come il tuo nick...

    volevo fare:
    - mettere tutti i dati che voglio nella struttura --> FATTO
    - visualizzare i dati storati nella struct (nome, cognome, eta ...) ciclicamente (fin tanto che č presente un altro elemento nella struct) --> FALLITO

    Mi son spiegato bene???

    In teoria il mio codice dovrebbe fare proprio questo, ammesso che funzioni...
    E se dichiarassi la struct come un array di stringhe, su cui puoi tranquillamente ciclare?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.