|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
[ C ] Ricerca Sequenziale in un elenco tramite Array di Puntatori
Ciao, devo cercare una struttura tramite un suo campo ( cognome ) e lo devo fare tramite un array di puntatori.
.main Codice:
#include "StudenteRicercaSequenziale.h"
int main(int argc, char *argv[])
{
studente mioStudente;
inserisciStudenti( mioStudente );
stampaStudenti( mioStudente );
cognomeDaRicercare( mioStudente );
printf("\n\n");
system("PAUSE");
return 0;
}
Codice:
#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
Codice:
#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;
}
in questo punto: Codice:
printf("Inserisci cognome da ricercare: ");
i = 0;
while( ( c = getchar() ) != '\n' )
{
chiave[ i++ ] = c;
}
chiave[ i ] = '\0';
__________________
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 : 28-05-2013 alle 15:39. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
Ci ho provato ma niente... qualcuno sa dirmi perchè la stringa non viene presa ?
__________________
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: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Prova con un brutale Codice:
fflush(stdin); |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
Grazie, funziona!
Mi è rimasto un unico problema alquanto misterioso, se inserisco fino a 5 cognomi ( a tempo di programmazione ) il programma funziona a meraviglia se però i cognomi sono 6 o di più crasha... che differenza fa se sono 5 o 6+ ??? Codice:
typedef utente studente[ 5 ]; // Funziona Codice:
typedef utente studente[ 6 ]; // NON funziona
__________________
Q9650@4140Mhz Voltaggi Feedback positivi ottenuti per vendite fatte a: Alfio89, Deskmat, Renato10, il mic, sosa, Emack - [ Lastre di Alluminio per modding computer ]
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2006
Città: Napoli
Messaggi: 786
|
RISOLTOOOOOOOOOOOOOO!!!!!!!!!!! Era solo un problema di compilatore... ho cambiato NMAX 300 ho riassemblato e poi riassemblato con il mio valore di NMAX 30 ed è andato!
Grazie Kendall!
__________________
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: 15:45.










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










