|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
[ C ] Puntatori e Array di Strutture
Ciao devo inserire dei dati all'interno di un array di strutture e per farlo devo usare i puntatori, il programma compila con questo warning: "21 [Warning] assignment makes integer from pointer without a cast "
MAIN: Codice:
#include "arrayRecordPuntatori.h" int main(int argc, char *argv[]) { studente mioStudente; int riemp; char *mioPtrNome[ NMAX ]; char *mioPtrCognome[ NMAX ]; int *mioPtrEta[ NMAX ]; riemp = sizeArrayRecord( riemp ); leggiStudente( mioStudente, &mioPtrNome[ NMAX ], &mioPtrCognome[ NMAX ], &mioPtrEta[ NMAX ], riemp ); stampaStudente( mioStudente, &mioPtrNome[ NMAX ], &mioPtrCognome[ NMAX ], &mioPtrEta[ NMAX ], riemp); printf("\n\n"); system("PAUSE"); return 0; } Codice:
#ifndef arrayRecordPuntatori_h #define arrayRecordPuntatori_h #define NMAX 30 typedef struct{ char nome[ NMAX ]; char cognome[ NMAX ]; int eta; }utente; typedef utente studente[ NMAX ]; int sizeArrayRecord( int r ); void leggiStudente( studente s, char *ptrNome[ NMAX ], char *ptrCognome[ NMAX ], int *ptrEta[ NMAX ], int r ); void stampaStudente( studente s, char *ptrNome[ NMAX ], char *ptrCognome[ NMAX ], int *ptrEta[ NMAX ], int r ); #endif Codice:
#include "arrayRecordPuntatori.h" int sizeArrayRecord( int r ) { printf("Inserisci il numero di studenti da inserire: "); scanf( "%d", &r ); return r; } void leggiStudente( studente s, char *ptrNome[ NMAX ], char *ptrCognome[ NMAX ], int *ptrEta[ NMAX ], int r ) { int register i; printf("Inserisci i %d studenti...\n", r ); for( i = 0; i < r; i++ ) { *ptrNome[ i ] = s[ i ].nome; *ptrCognome[ i ] = s[ i ].cognome; *ptrEta[ i ] = &s[ i ].eta; printf("Studente n %d\n", i ); printf("Nome: "); gets( ptrNome[ i ] ); printf("Cognome: "); gets( ptrCognome[ i ] ); printf("Eta: "); scanf("%d", ptrEta[ i ] ); printf("\n"); } } void stampaStudente( studente s, char *ptrNome[ NMAX ], char *ptrCognome[ NMAX ], int *ptrEta[ NMAX ], int r ) { int register i; printf("Stampo i %d studenti...\n", r ); for( i = 0; i < r ; i++ ) { printf("Studente n %d\n", i ); printf("Nome: "); printf( "%s\n", ptrNome[ i ] ); printf("Cognome: "); printf( "%s\n", ptrCognome[ i ] ); printf("Eta: "); printf("%d", *ptrEta[ i ] ); printf("\n"); } } Qualcuno sa come fare ? Grazie! ![]()
__________________
Q9650@4140Mhz Voltaggi ![]() ![]() ![]() Ultima modifica di Riccardo88 : 22-05-2013 alle 16:38. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
Nessuno ?
![]()
__________________
Q9650@4140Mhz Voltaggi ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2010
Messaggi: 2400
|
non ho voglia di leggermi tutto il codice
![]() comunque i caso sono 2 o stai passando un vettore a una funzione che vuole un elemento solo o non hai fatto il cast bene nella malloc ![]()
__________________
MoBo: Asus Rampage II Extreeme || CPU: Xeon w3690 @ 3.6 GHz|| RAM: Patriot Viper 3x2GB 1600Mhz + 3x2GB Kingston || VGA: Zotac GTX 980 AMP! Omega || PSU: Enermax Libery 620w || SSD: Samsung 830 128GB || HDD: nMila GB || CASE:NZXT H440 NB1: rMB PRO 2019 i9 32GB || NB2: Apple rMB 12" m7 || NB3: MSI GS73 7RE |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Controlla questo:
Codice:
*ptrNome[ i ] = s[ i ].nome; *ptrCognome[ i ] = s[ i ].cognome; *ptrEta[ i ] = &s[ i ].eta; p.s: gli devo molto in fatto di apprendimento, ma più leggo righe di codice in C più odio questo linguaggio per l'uso pratico. Ultima modifica di [Kendall] : 24-05-2013 alle 09:09. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Mar 2011
Messaggi: 295
|
A parte due header dimenticati e l'uso di gets che è stata abbandonata, perchè in leggiStudente usi i vari *mioPtrNome[NMAX], *mioPtrNome[NMAX], *mioPtrNome[NMAX]? Non fai prima a modificare direttamente l'array di struct? Con queste modifiche a me funziona:
arrayRecordPuntatori.h: Codice:
#ifndef arrayRecordPuntatori_h #define arrayRecordPuntatori_h #define NMAX 30 typedef struct{ char nome[ NMAX ]; char cognome[ NMAX ]; int eta; }utente; typedef utente studente[ NMAX ]; int sizeArrayRecord( int r ); void leggiStudente( studente s, int r ); void stampaStudente( studente s, int r ); #endif Codice:
#include "arrayRecordPuntatori.h" #include <stdio.h> int main(int argc, char *argv[]) { studente mioStudente; int riemp; riemp = sizeArrayRecord( riemp ); leggiStudente(mioStudente, riemp); stampaStudente(mioStudente, riemp); printf("\n\n"); return 0; } Codice:
#include "arrayRecordPuntatori.h" #include <stdio.h> int sizeArrayRecord( int r ) { printf("Inserisci il numero di studenti da inserire: "); scanf( "%d", &r ); return r; } void leggiStudente( studente s, int r ) { int register i; printf("Inserisci i %d studenti...\n", r ); for( i = 0; i < r; i++ ) { printf("Studente n %d\n", i ); printf("Nome: "); scanf("%s", &( s[i].nome ) ); printf("Cognome: "); scanf("%s", &( s[i].cognome ) ); printf("Eta: "); scanf("%d", &( s[i].eta ) ); printf("\n"); } } void stampaStudente( studente s, int r ) { int register i; printf("Stampo i %d studenti...\n", r ); for( i = 0; i < r ; i++ ) { printf("Studente n %d\n", i ); printf("Nome: "); printf( "%s\n", &( s[i].nome ) ); printf("Cognome: "); printf( "%s\n", &( s[i].cognome) ); printf("Eta: "); printf("%d", s[i].eta ); printf("\n"); } } Ultima modifica di polteus : 24-05-2013 alle 19:20. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
Grazie per aver risposto.
Ho apportato le modifiche di polteus e il codice così funziona. Ma io dovrei farlo con in puntatori, ad esempio se devo stampare una sola struttura: .main Codice:
#include "libretto20Esami.h" int main(int argc, char *argv[]) { studente mioStudente; leggiStruttura( &mioStudente ); stampaStruttura( mioStudente ); printf("\n\n"); system("PAUSE"); return 0; } Codice:
#ifndef libretto20Esami_h #define libretto20Esami_h #include <stdio.h> #define NMAX 30 typedef struct{ char nome[ NMAX ]; char cognome[ NMAX ]; int matricola; }studente; void leggiStruttura( studente *s ); void stampaStruttura( studente s ); #endif Codice:
void leggiStruttura( studente *s ) { printf("Inserisci i dati dello studente:\n"); printf("Nome: "); scanf( "%s", s->nome ); printf("Cognome: "); scanf( "%s", s->cognome ); printf("Matricola: "); scanf( "%d", &(s->matricola) ); } void stampaStruttura( studente s ) { printf("\nStampo i dati dello studente:\n"); printf("Nome: "); printf( "%s\n", s.nome ); printf("Cognome: "); printf( "%s\n", s.cognome ); printf("Matricola: "); printf( "%d\n", s.matricola ); } Il mio problema è passare alle funzioni i puntatori che andranno a lavorare sull'array di struct. In pratica fare la stessa cosa ma lavorando su un array di struct studente.
__________________
Q9650@4140Mhz Voltaggi ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Mar 2011
Messaggi: 295
|
Quote:
arrayRecordPuntatori.h: Codice:
#ifndef arrayRecordPuntatori_h #define arrayRecordPuntatori_h #define NMAX 30 typedef struct{ char nome[ NMAX ]; char cognome[ NMAX ]; int eta; }utente; typedef utente studente[ NMAX ]; int sizeArrayRecord( int r ); void leggiStudente( studente *s, int r ); void stampaStudente( studente *s, int r ); #endif Codice:
#include "arrayRecordPuntatori.h" #include <stdio.h> int main(int argc, char *argv[]) { studente mioStudente; int riemp; riemp = sizeArrayRecord( riemp ); leggiStudente(&mioStudente, riemp); stampaStudente(&mioStudente, riemp); printf("\n\n"); return 0; } Codice:
#include "arrayRecordPuntatori.h" #include <stdio.h> int sizeArrayRecord( int r ) { printf("Inserisci il numero di studenti da inserire: "); scanf( "%d", &r ); return r; } void leggiStudente( studente *s, int r ) { int register i; printf("Inserisci i %d studenti...\n", r ); for( i = 0; i < r; i++ ) { printf("Studente n %d\n", i ); printf("Nome: "); scanf("%s", &( (*s)[i].nome ) ); printf("Cognome: "); scanf("%s", &( (*s)[i].cognome ) ); printf("Eta: "); scanf("%d", &( (*s)[i].eta ) ); printf("\n"); } } void stampaStudente( studente *s, int r ) { int register i; printf("Stampo i %d studenti...\n", r ); for( i = 0; i < r ; i++ ) { printf("Studente n %d\n", i ); printf("Nome: "); printf( "%s\n", &( (*s)[i].nome ) ); printf("Cognome: "); printf( "%s\n", &( (*s)[i].cognome) ); printf("Eta: "); printf("%d", (*s)[i].eta ); printf("\n"); } } Ultima modifica di polteus : 25-05-2013 alle 14:11. |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
Quindi in definitiva quando devo passare alle funzioni UNA struttura da costruire posso farla così:
.main Codice:
#include "StrutturaConPuntatori.h" int main(int argc, char *argv[]) { studente mioStudente; leggiStruttura( &mioStudente ); stampaStruttura( mioStudente ); printf("\n\n"); system("PAUSE"); return 0; } Codice:
#ifndef StrutturaConPuntatori_h #define StrutturaConPuntatori_h #include <stdio.h> #define NMAX 30 typedef struct{ char nome[ NMAX ]; char cognome[ NMAX ]; int matricola; }studente; //in questo caso servirà una sola struttura e non un array di strutture quindi //non troviamo qualcosa del tipo: typedef studente studenti[ NMAX ]; void leggiStruttura( studente *s ); void stampaStruttura( studente s ); #endif Codice:
#include "StrutturaConPuntatori.h" void leggiStruttura( studente *s ) { printf("Inserisci i dati dello studente:\n"); printf("Nome: "); scanf( "%s", s->nome ); printf("Cognome: "); scanf( "%s", s->cognome ); printf("Matricola: "); scanf( "%d", &(s->matricola) ); } void stampaStruttura( studente s ) { printf("\nStampo i dati dello studente:\n"); printf("Nome: "); printf( "%s\n", s.nome ); printf("Cognome: "); printf( "%s\n", s.cognome ); printf("Matricola: "); printf( "%d\n", s.matricola ); } INVECE se devo inserire un Array di strutture... .main Codice:
#include "arrayRecord.h" int main(int argc, char *argv[]) { studente mioStudente; int riemp; riemp = sizeArrayRecord( riemp ); leggiStudente( mioStudente, riemp ); stampaStudente( mioStudente, riemp); printf("\n\n"); system("PAUSE"); return 0; } Codice:
#ifndef arrayRecord_h #define arrayRecord_h #define NMAX 30 typedef struct{ char nome[ NMAX ]; char cognome[ NMAX ]; int eta; }utente; typedef utente studente[ NMAX ]; int sizeArrayRecord( int r ); void leggiStudente( studente s, int r ); void stampaStudente( studente s, int r ); #endif Codice:
#include "arrayRecord.h" int sizeArrayRecord( int r ) { printf("Inserisci il numero di studenti da inserire: "); scanf( "%d", &r ); return r; } Corretto? :rolleyes: void leggiStudente( studente s, int r ) { int register i; printf("Inserisci i %d studenti...\n", r ); for( i = 0; i < r; i++ ) { printf("Studente n %d\n", i ); printf("Nome: "); scanf("%s", &( s[ i ].nome ) ); printf("Cognome: "); scanf("%s", &( s[ i ].cognome ) ); printf("Eta: "); scanf("%d", &( s[ i ].eta ) ); printf("\n"); } } void stampaStudente( studente s, int r ) { int register i; printf("Stampo i %d studenti...\n", r ); for( i = 0; i < r ; i++ ) { printf("Studente n %d\n", i ); printf("Nome: "); printf( "%s\n", &( s[ i ].nome ) ); printf("Cognome: "); printf( "%s\n", &( s[ i ].cognome) ); printf("Eta: "); printf("%d", s[ i ].eta ); printf("\n"); } }
__________________
Q9650@4140Mhz Voltaggi ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:22.