PDA

View Full Version : [C++] Passaggio di una struttura di array in una function.


Xizor
06-03-2008, 17:30
#include<iostream.h>
#define n 16
int main(){
int i,a;
struct classe {
char nome[30];
char cognome[30];
char nascita[10];
char luogo[20];
};
typedef struct classe studente;
studente classe[n];
cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
cout<<"Nome "<<i+1<<":"<<"\n";
cin>>classe[i].nome;
cout<<"Cognome "<<i+1<<":"<<"\n";
cin>>classe[i].cognome;
cout<<"Anno di nascita "<<i+1<<":"<<"\n";
cin>>classe[i].nascita;
cout<<"Luogo di nascita "<<i+1<<":"<<"\n";
cin>>classe[i].luogo;
}
cout<<"Inserisci il nome della persona che vuoi cercare"<<"\n";
cin>>classe[a].nome;
for(i=0;i<n;i++){
if(classe[a].nome==classe[i].nome){
cout<<"Ricerca compiuta con successo\n";
cout<<"Nome: "<<classe[a].nome<<" Cognome: "<<classe[a].cognome<<" Anno di nascita: "<<classe[a].nascita<<" Luogo di nascita: "<<classe[a].luogo<<"\n";
}
else {
a++;
}
}
system("pause");
return 0;
}

Salve a tutti, io cercavo di passare in una function un array,di uno di quelli all'interno della struttura (ad esempio "cognome") e poi lavorarci lì. Come devo fare il prototipo della funzione ?? E la chiamata? Grazie. :mc:

gugoXX
06-03-2008, 17:42
Per favore, potresti rieditare con
CODE
invece che con
QUOTE

m.distrutti
06-03-2008, 18:26
Salve a tutti, io cercavo di passare in una function un array,di uno di quelli all'interno della struttura (ad esempio "cognome") e poi lavorarci lì. Come devo fare il prototipo della funzione ?? E la chiamata? Grazie. :mc:

se dentro la funzione gestisci un array di char qualsiasi non penso ti interessi sapere che quell'array faccia parte di una struct nel corpo della funzione, sei tu durante la chiamata che ti preoccupi di tale cosa

void funzione(char* nome);

per poi chiamarla con : funzione(classe[a].nome)

cmq mi ha incuriosito mo ci do un occhiata per vedere se e' possibile specificare quello che richiedi :P

Xizor
06-03-2008, 18:37
se dentro la funzione gestisci un array di char qualsiasi non penso ti interessi sapere che quell'array faccia parte di una struct nel corpo della funzione, sei tu durante la chiamata che ti preoccupi di tale cosa

void funzione(char* nome);

per poi chiamarla con : funzione(classe[a].nome)

cmq mi ha incuriosito mo ci do un occhiata per vedere se e' possibile specificare quello che richiedi :P


Ho provato a fare così: ;)


#include<iostream.h>
#define n 16
int main(){
void prova (char* nome);
int i,a;
struct classe {
char nome[30];
char cognome[30];
char nascita[10];
char luogo[20];
};
typedef struct classe studente;
studente classe[n];
cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
cout<<"Nome "<<i+1<<":"<<"\n";
cin>>classe[i].nome;
cout<<"Cognome "<<i+1<<":"<<"\n";
cin>>classe[i].cognome;
cout<<"Anno di nascita "<<i+1<<":"<<"\n";
cin>>classe[i].nascita;
cout<<"Luogo di nascita "<<i+1<<":"<<"\n";
cin>>classe[i].luogo;
}
prova(classe[a].nome)
system("pause");
return 0;
}

void prova (char* nome){
int a,i;
cout<<"Inserisci il cognome della persona che vuoi cercare"<<"\n";
cin>>classe[a].nome;
for(i=0;i<n;i++){
if(classe[a].nome==classe[i].nome){
cout<<"Ricerca compiuta con successo\n";
cout<<"Nome: "<<classe[a].nome<<" Cognome: "<<classe[a].cognome<<" Anno di nascita: "<<classe[a].nascita<<" Luogo di nascita: "<<classe[a].luogo<<"\n";
}
}
return;
}


Mi dice "classe undeclared" nella funzione prova.

..::DAVE::..
06-03-2008, 18:51
Ho provato a fare così: ;)


void prova (char* nome)


Mi dice "classe undeclared" nella funzione prova.

perche gli passi un char* non un classe*

Xizor
06-03-2008, 18:58
Quindi? Credo di non aver capito esattamente quello che intendi. :)

m.distrutti
06-03-2008, 19:31
Ho provato a fare così: ;)
Mi dice "classe undeclared" nella funzione prova.

il codice ha un bel po di errori sia di logica che di implementazione, dentro prova te vuoi ricercare un nome dentro l'array della struct e non stai usando mai il parametro nome della funzione , inoltre acquisisci nell'array nome il nome che vuoi ricercare rischiando di perdere un nome gia salvato(in un indice a mai inizializzato :S, il C a differenza di linguaggi come Java e Visual Basic non inizializza a zero le variabili), in piu mi hai dichiarato il prototipo di funzione dentro il main

PS: avendo dichiarato classe[] dentro il main sarebbe impossibile ricercarlo dalla funzione prova siccome il suo scope e' dentro il main :S :S

ora ti faccio una mia versione velocemente cosi capisci meglio

Xizor
06-03-2008, 19:45
il codice ha un bel po di errori sia di logica che di implementazione, dentro prova te vuoi ricercare un nome dentro l'array della struct e non stai usando mai il parametro nome della funzione , inoltre acquisisci nell'array nome il nome che vuoi ricercare rischiando di perdere un nome gia salvato(in un indice a mai inizializzato :S, il C a differenza di linguaggi come Java e Visual Basic non inizializza a zero le variabili), in piu mi hai dichiarato il prototipo di funzione dentro il main

PS: avendo dichiarato classe[] dentro il main sarebbe impossibile ricercarlo dalla funzione prova siccome il suo scope e' dentro il main :S :S

ora ti faccio una mia versione velocemente cosi capisci meglio

ok grazie. :D

:doh: perdonami, ho appena iniziato le strutture con le function in c++

m.distrutti
06-03-2008, 19:45
#include <iostream.h>
#include <string.h>
#define n 2

struct classe {
char nome[30];
char cognome[30];
char nascita[10];

char luogo[20];
};
typedef struct classe studente;
void prova (studente*);

studente classe[n];

int main(){
int i;

cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
cout<<"Nome "<<(i+1)<<":"<<"\n";
cin>>classe[i].nome;
cout<<"Cognome "<<(i+1)<<":"<<"\n";
cin>>classe[i].cognome;
cout<<"Anno di nascita "<<(i+1)<<":"<<"\n";
cin>>classe[i].nascita;
cout<<"Luogo di nascita "<<(i+1)<<":"<<"\n";
cin>>classe[i].luogo;
}
prova(classe);
getch();
//system("pause");
return 0;
}

void prova (studente* classe){
char* ricerca;
cout<<"Inserisci il nome da ricercare";
cin>>ricerca;
for(int i = 0;i < n;i++){
if(strcmpi(ricerca, classe[i].nome) == 0)
cout<<"ricerca compiuta con successo";
}
}

ok ora va, l'errore che ti dava prima era probabilmente dovuto al fatto che la variabile che usavi (appunto classe) l'avevi dichiarata all'interno del main, percio non essendoci nessun altra variabile classe dichiarata il cui scope potesse essere raggiunto dalla funzione prova ti diceva che non era dichiarata

ora alla funzione passi lo struct , nella funzione acquisisci da tastiera un char* per la tua ricerca e il confronto lo fai case insensitive con la funzione strcmpi

la funzione ti restituisce un valore corrispondente alla differenza degli ultimi caratteri(intesi come valori in byte) confrontati percio se e' zero vuol dire che ha confrontato due byte uguali, due carattri uguali per intenderci

^_^

Xizor
06-03-2008, 19:54
#include <iostream.h>
#include <string.h>
#define n 2

struct classe {
char nome[30];
char cognome[30];
char nascita[10];

char luogo[20];
};
typedef struct classe studente;
void prova (studente*);

studente classe[n];

int main(){
int i;

cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
cout<<"Nome "<<(i+1)<<":"<<"\n";
cin>>classe[i].nome;
cout<<"Cognome "<<(i+1)<<":"<<"\n";
cin>>classe[i].cognome;
cout<<"Anno di nascita "<<(i+1)<<":"<<"\n";
cin>>classe[i].nascita;
cout<<"Luogo di nascita "<<(i+1)<<":"<<"\n";
cin>>classe[i].luogo;
}
prova(classe);
getch();
//system("pause");
return 0;
}

void prova (studente* classe){
char* ricerca;
cout<<"Inserisci il nome da ricercare";
cin>>ricerca;
for(int i = 0;i < n;i++){
if(strcmpi(ricerca, classe[i].nome) == 0)
cout<<"ricerca compiuta con successo";
}
}

ok ora va, l'errore che ti dava prima era probabilmente dovuto al fatto che la variabile che usavi (appunto classe) l'avevi dichiarata all'interno del main, percio non essendoci nessun altra variabile classe dichiarata il cui scope potesse essere raggiunto dalla funzione prova ti diceva che non era dichiarata

ora alla funzione passi lo struct , nella funzione acquisisci da tastiera un char* per la tua ricerca e il confronto lo fai case insensitive con la funzione strcmpi

la funzione ti restituisce un valore corrispondente alla differenza degli ultimi caratteri(intesi come valori in byte) confrontati percio se e' zero vuol dire che ha confrontato due byte uguali, due carattri uguali per intenderci

^_^

Grazie 1000!;) Però un ultima cosa...getch a cosa serve?? Per caso devo inserire una nuova libreria per includerlo? Perchè mi dice "getch undeclared".

m.distrutti
06-03-2008, 20:07
Grazie 1000!;) Però un ultima cosa...getch a cosa serve?? Per caso devo inserire una nuova libreria per includerlo? Perchè mi dice "getch undeclared".

omg scusami, in pratica getch(); e' della libreria <conio.h>
acquisisci un carattere e per come l'ho scritto io in pratica serve a non far sparire la finestra dopo l'esecuzione da un compilatore visuale come il mio dato che e' in attesa di questa acquisizione come ultimissima istruzione del programma

e' in pratica lo stesso motivo per il quale usi system(etc...)

ihih

togli il commento a system("PAUSE"); ed elimina elimina getch() che mi son dimenticato di togliere pure quella riga oltre conio

sono piu abituato a programmare puramente in c io >_<

cionci
07-03-2008, 08:20
Per favore prima di consigliare funzioni non standard come getch specifichiamolo chiaramente.
getch NON appartiene allo standard C, è una estensione che fu introdotta da Borland e NON c'è in tutti i compilatori o ambienti di sivluppo. Quindi se si vuole usare una funzione non standard in un ambiente scolastico è bene pensarci tante volte ed alla fine non usarla :D