|
|
|
![]() |
|
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 ![]() ![]() ![]() Ultima modifica di Riccardo88 : 28-05-2013 alle 14: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 ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#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 ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#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 ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:52.