Riccardo88
28-05-2013, 14:37
Ciao, devo cercare una struttura tramite un suo campo ( cognome ) e lo devo fare tramite un array di puntatori.
.main
#include "StudenteRicercaSequenziale.h"
int main(int argc, char *argv[])
{
studente mioStudente;
inserisciStudenti( mioStudente );
stampaStudenti( mioStudente );
cognomeDaRicercare( mioStudente );
printf("\n\n");
system("PAUSE");
return 0;
}
.header
#ifndef StudenteRicercaSequenziale_h
#define StudenteRicercaSequenziale_h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 30
typedef struct{
char nome[ NMAX ];
char cognome[ NMAX ];
int matricola;
}utente;
typedef utente studente[ 10 ];
void inserisciStudenti( studente s );
void stampaStudenti( studente s );
void cognomeDaRicercare( studente s );
int ricercaSequenziale( utente *uPnt[], char *key, int r );
#endif
.c
#include "StudenteRicercaSequenziale.h"
void inserisciStudenti( studente s )
{
int register i;
printf("Inserisci i 10 studenti:\n");
for( i = 0; i < 10; i++ )
{
printf("Studente numero %d\n", i );
printf("Nome: ");
scanf("%s", &( s[ i ].nome ) );
printf("Cognome: ");
scanf("%s", &( s[ i ].cognome ) );
printf("Matricola: ");
scanf("%d", &( s[ i ].matricola ) );
printf("\n");
}
printf("\n");
}
void stampaStudenti( studente s )
{
int register i;
printf("Stampo i 10 studenti:\n\n");
for( i = 0; i < 10; i++ )
{
printf("Studente numero %d\n", i );
printf("Nome: ");
printf("%s\n", s[ i ].nome );
printf("Cognome: ");
printf("%s\n", s[ i ].cognome );
printf("Matricola: ");
printf("%d\n", s[ i ].matricola );
printf("\n");
}
}
void cognomeDaRicercare( studente s )
{
int register i;
int risultato;
char chiave[ NMAX ];
char c;
utente *utentePnt[ 10 ];
for( i = 0; i < 10; i++ ) //carica array di puntatori
{
utentePnt[ i ] = &s[ i ];
}
printf("Inserisci cognome da ricercare: ");
i = 0;
while( ( c = getchar() ) != '\n' )
{
chiave[ i++ ] = c;
}
chiave[ i ] = '\0';
printf("\nRicerco il cognome all'interno dell'elenco...\n");
risultato = ricercaSequenziale( utentePnt, chiave, 10 );
if( risultato != -1 )
{
printf("\nStudente %s trovato in posizione %d\n", utentePnt[ risultato ]->cognome, risultato+1 );
}
else
{
printf("\nStudente non trovato\n");
}
}
int ricercaSequenziale( utente *uPnt[], char *key, int r )
{
int register i;
printf("\nChiave da cercare vale: " );
puts( key );
for( i = 0; i < r; i++ )
{
printf("\nCognome: %s = %s ?\n", uPnt[ i ]->cognome, key );
if( strcmp( uPnt[ i ]->cognome, key ) == 0 )
{
return i;
}
}
return -1;
}
Non capisco il perchè ma non mi permette di inserire il cognome da cercare nell'elenco. :confused:
in questo punto:
printf("Inserisci cognome da ricercare: ");
i = 0;
while( ( c = getchar() ) != '\n' )
{
chiave[ i++ ] = c;
}
chiave[ i ] = '\0';
perchè non mi si fila questa parte di codice ? :mbe:
.main
#include "StudenteRicercaSequenziale.h"
int main(int argc, char *argv[])
{
studente mioStudente;
inserisciStudenti( mioStudente );
stampaStudenti( mioStudente );
cognomeDaRicercare( mioStudente );
printf("\n\n");
system("PAUSE");
return 0;
}
.header
#ifndef StudenteRicercaSequenziale_h
#define StudenteRicercaSequenziale_h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 30
typedef struct{
char nome[ NMAX ];
char cognome[ NMAX ];
int matricola;
}utente;
typedef utente studente[ 10 ];
void inserisciStudenti( studente s );
void stampaStudenti( studente s );
void cognomeDaRicercare( studente s );
int ricercaSequenziale( utente *uPnt[], char *key, int r );
#endif
.c
#include "StudenteRicercaSequenziale.h"
void inserisciStudenti( studente s )
{
int register i;
printf("Inserisci i 10 studenti:\n");
for( i = 0; i < 10; i++ )
{
printf("Studente numero %d\n", i );
printf("Nome: ");
scanf("%s", &( s[ i ].nome ) );
printf("Cognome: ");
scanf("%s", &( s[ i ].cognome ) );
printf("Matricola: ");
scanf("%d", &( s[ i ].matricola ) );
printf("\n");
}
printf("\n");
}
void stampaStudenti( studente s )
{
int register i;
printf("Stampo i 10 studenti:\n\n");
for( i = 0; i < 10; i++ )
{
printf("Studente numero %d\n", i );
printf("Nome: ");
printf("%s\n", s[ i ].nome );
printf("Cognome: ");
printf("%s\n", s[ i ].cognome );
printf("Matricola: ");
printf("%d\n", s[ i ].matricola );
printf("\n");
}
}
void cognomeDaRicercare( studente s )
{
int register i;
int risultato;
char chiave[ NMAX ];
char c;
utente *utentePnt[ 10 ];
for( i = 0; i < 10; i++ ) //carica array di puntatori
{
utentePnt[ i ] = &s[ i ];
}
printf("Inserisci cognome da ricercare: ");
i = 0;
while( ( c = getchar() ) != '\n' )
{
chiave[ i++ ] = c;
}
chiave[ i ] = '\0';
printf("\nRicerco il cognome all'interno dell'elenco...\n");
risultato = ricercaSequenziale( utentePnt, chiave, 10 );
if( risultato != -1 )
{
printf("\nStudente %s trovato in posizione %d\n", utentePnt[ risultato ]->cognome, risultato+1 );
}
else
{
printf("\nStudente non trovato\n");
}
}
int ricercaSequenziale( utente *uPnt[], char *key, int r )
{
int register i;
printf("\nChiave da cercare vale: " );
puts( key );
for( i = 0; i < r; i++ )
{
printf("\nCognome: %s = %s ?\n", uPnt[ i ]->cognome, key );
if( strcmp( uPnt[ i ]->cognome, key ) == 0 )
{
return i;
}
}
return -1;
}
Non capisco il perchè ma non mi permette di inserire il cognome da cercare nell'elenco. :confused:
in questo punto:
printf("Inserisci cognome da ricercare: ");
i = 0;
while( ( c = getchar() ) != '\n' )
{
chiave[ i++ ] = c;
}
chiave[ i ] = '\0';
perchè non mi si fila questa parte di codice ? :mbe: