|
|||||||
|
|
|
![]() |
|
|
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 Feedback positivi ottenuti per vendite fatte a: Alfio89, Deskmat, Renato10, il mic, sosa, Emack - [ Lastre di Alluminio per modding computer ]
Ultima modifica di Riccardo88 : 22-05-2013 alle 17:38. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
Nessuno ?
__________________
Q9650@4140Mhz Voltaggi Feedback positivi ottenuti per vendite fatte a: Alfio89, Deskmat, Renato10, il mic, sosa, Emack - [ Lastre di Alluminio per modding computer ]
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2010
Messaggi: 2400
|
non ho voglia di leggermi tutto il codice
a che linea hai il warning?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 10: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 20: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 Feedback positivi ottenuti per vendite fatte a: Alfio89, Deskmat, Renato10, il mic, sosa, Emack - [ Lastre di Alluminio per modding computer ]
|
|
|
|
|
|
#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 15: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 Feedback positivi ottenuti per vendite fatte a: Alfio89, Deskmat, Renato10, il mic, sosa, Emack - [ Lastre di Alluminio per modding computer ]
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:07.










Feedback positivi ottenuti per vendite fatte a: Alfio89, Deskmat, Renato10, il mic, sosa, Emack 

a che linea hai il warning?








