PDA

Visualizza la versione completa : [C++] Passaggio di struct a funzioni


frufru
04-01-2012, 22:20
Aiuto sono disperato! Non riesco proprio a passare una struct ad una funzione di tipo void.

- la funzione leggi(), legga a terminale i dati di N studenti (con N definito come la costante 4)
costituiti da Nome, Cognome, Voto, e li inserisca in un vettore;

Praticamente io avrei pensato, che ogni membro della funzione, sia caricato dentro ad un array differente.

Il problema che non so utilizzare i puntatori in questo ambito etc etc..
Vi sarei grato se voi poteste aiutarmi aggiungendo i puntatori, e tutto quello che serve per far funzionare il tutto correttamente.

#include "stdafx.h"
using namespace std;
#define N 4
#define MAX 50
struct info
{
char nome[15];
char cognome[20];
char voto[2];
}dato;
//Prototipo funzione
void lettura(struct info, struct info, struct info, struct info );

int _tmain(int argc, _TCHAR* argv[])
{
char v_nome[MAX];
char v_cognome[MAX];
char v_voto[MAX];
lettura(dato, v_nome, v_cognome, v_voto);
_getch();
return 0;
}
void lettura(struct info dato, struct info vettore_nome[MAX], struct info vettore_cognome[MAX], struct info vettore_voto[MAX])
{
char scelta=0;
int i_nome=0, i_cognome=0, i_voto=0;
do {
cout<<"Nome: "; cin>>dato.nome;
vettore_nome[i_nome]=dato.nome; i_nome++;

cout<<"Cognome: "; cin>>dato.cognome;
vettore_cognome[i_cognome]=dato.cognome; i_cognome++;

cout<<"Voto: "; cin>>dato.voto;
vettore_voto[i_voto]=dato.voto; i_voto++;

cout<<"Continuare? 1 = si - 0 = no.";
cin>>scelta;

}while(scelta==1);
}

ramy89
04-01-2012, 23:54
Non hai usato i tag code e non hai indentato il codice, ti faccio un esempio di codice indentato:


void lettura(struct info dato, struct info vettore_nome[MAX], struct info vettore_cognome[MAX], struct info vettore_voto[MAX])
{
char scelta=0;
int i_nome=0, i_cognome=0, i_voto=0;
do{
cout<<"Nome: "; cin>>dato.nome;
vettore_nome[i_nome]=dato.nome; i_nome++;

cout<<"Cognome: "; cin>>dato.cognome;
vettore_cognome[i_cognome]=dato.cognome; i_cognome++;

cout<<"Voto: "; cin>>dato.voto;
vettore_voto[i_voto]=dato.voto; i_voto++;

cout<<"Continuare? 1 = si - 0 = no.";
cin>>scelta;

}while(scelta==1);
}

Ma qual' il problema? Ti da qualche errore o warning?
La funzione non si comporta come dovrebbe? Come si comporta? Come dovrebbe comportarsi?

oregon
05-01-2012, 00:56
Originariamente inviato da frufru
Praticamente io avrei pensato, che ogni membro della funzione, sia caricato dentro ad un array differente.

No ... altrimenti a cosa servirebbe la struttura ?


Vi sarei grato se voi poteste aiutarmi aggiungendo i puntatori, e tutto quello che serve per far funzionare il tutto correttamente.

Diciamo che ti fornisco qualche indicazione che poi tu completerai ...

Per la struttura ...



#define N 4

struct info
{
char nome[15];
char cognome[20];
char voto[2];
};


Per il main



int _tmain(int argc, _TCHAR* argv[])
{
struct info dati[N];

lettura(dati);
...


Per la funzione



void lettura(struct info *d)
{
char scelta=0;

int i = 0;

do
{
cout<<"Nome: ";
cin >> d[i].nome;
...

frufru
05-01-2012, 11:44
Si, mi da problemi del tipo: 'fatal error LNK1120: 1 esterni non risolti', che credo sia legato all'errato utilizzo dei puntatori ed altro. Adesso provo con i vostri consigli, vi faccio sapere al pi presto. Grazie mille per l'aiuto, buona giornata! :)

frufru
05-01-2012, 12:30
Ok, ho fatto come mi ha consigliato oregon.. Ora parte e va, ma non riesco a capire quale sia la dimensione del vettore 'd' nella funzione 'lettura'..Inoltre devo fare un'altra funzione e due stampe..
2) calcoli con la funzione media() la media dei voti;
3) stampi a terminale i nominativi di ciascuno studente;
4) stampi poi a terminale il voto medio.
Per quanto riguarda 2) come faccio ad accedere nelle celle dove sono salvati i voti? Non sarebbe meglio fare un vettore di stringhe per ogni membro della struttura? Vi ringrazio.

oregon
05-01-2012, 14:11
Originariamente inviato da frufru
Ok, ho fatto come mi ha consigliato oregon.. Ora parte e va, ma non riesco a capire quale sia la dimensione del vettore 'd' nella funzione 'lettura'..

E' costante ... l'hai definito tu con la costante N ...


Per quanto riguarda 2) come faccio ad accedere nelle celle dove sono salvati i voti?

Esattamente come gi hai visto in lettura ...

frufru
07-01-2012, 11:30
Niente non va :confused: .. Ci rinuncio, grazie per i consigli :ciauz:

Rising1
07-01-2012, 14:53
aspettate ma quando si passa un puntatore a struttura non bisogna usare l'operatore "->" per accedere ai suoi membri?

oregon
07-01-2012, 15:34
Rising ... il puntatore passato ad "un array di strutture" ...

frufru ... cosa non va?

Loading