espaoloema (Normal User)
Newbie
Messaggi: 11
Iscritto: 18/02/2010
|
ragazzi eccomi con un altro progetto....
ho implementato quasi ttt, si tratta di una gestione di una biblioteca...ma non riesco a capire ke c è ke mi manda in crash la void prestito_con_titolo....
mi date una mano please?!?!?
Codice sorgente - presumibilmente C++ |
typedef struct{ char titolo[256]; char autore[64]; int codice; char inPrestito; } LIBRO; int codice; int libriInseriti = 0; LIBRO libri[MAX_LIBRI]; void inserimento(); void prestito_con_titolo(char*); void prestito_con_codice(int); void restituisci_libro(int); void contenuto(); /*main*/ void main() { int scelta, codiceDaCercare, codiceDaRestituire; char *titoloDaCercare = ""; char tit[100]; /* Codice di partenza per i libri */ codice = abs(rand()); printf("\n\n --- Biblioteca ---"); case 2: printf("\n\nInserire titolo del libro da prestare\n"); fflush(stdin); gets(tit); titoloDaCercare=tit; prestito_con_titolo(titoloDaCercare);; } /* funzioni */ void prestito_con_titolo(char *titolo) { int pos,scelta, libroPresente=0; char continua; for(pos=0;pos<libriInseriti;pos++) { if(strcmp(libri[pos].titolo,titolo)==0) { libroPresente = 1; if(libri[pos].inPrestito == 'f'){ printf("\n\nVuoi continuare con il prestito di questo libro?"); printf("\n\t1: Si.\n\t2: No.\n"); scanf("%d",&scelta); switch(scelta){ case 1: libri[pos].inPrestito = 'v'; printf("\nPrestito effettuato..."); scanf("%c",&continua); case 2: break; } } else { printf("\nSpiacenti libro gia' in prestito..."); scanf("%c",&continua); } } } if(libroPresente == 0) { printf("\n\nSpiacenti questo libro non e' presente in "); printf("questa biblioteca..."); scanf("%c",&continua); } }
|
Ultima modifica effettuata da espaoloema il 21/02/2010 alle 20:26 |
|
giuseppe93 (Ex-Member)
Pro
Messaggi: 166
Iscritto: 02/08/2009
|
non puoi fare gets(titoloDaCercare); in quanto titoloDaCercare è un puntatore, quindi o dichiari titoloDaCercare come un array di char oppure dichiari un'altra variabile come array di char del tipo char nuovavariabile[100], fai gets(nuovavariabile) e titoloDaCercare=nuovavariabile;
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ciao!
Ho letto il tuo programma e, ho notato che ti affidi a variabili globali.
Prova a riscriverlo usando variabili locali, a mio avviso, è molto più sicuro!
Per quanto riguarda la funzione "void prestito_con_titolo ( char* )", a me sembra funzionare bene!
Ho trovato un errore nella funzione " void inserimento ( ) " :
Codice sorgente - presumibilmente C/C++ |
void inserimento(){
LIBRO libro = {"","",0,'f'};
int esiste, pos;
printf("\n\nInserire i dati relativi al libro N. %d", (libriInseriti+1));
do{
esiste = 0;
printf("\nTitolo: ");
fflush(stdin);
scanf("%s", libro.titolo);
for(pos=0; pos < libriInseriti; pos++){
if(strcmp(libro.titolo, libri[pos].titolo) == 0){
esiste = 1;
printf("Titolo libro gi… presente, inserire un titolo differente");
break;
}
}
} while(esiste == 1);
printf("Autore: ");
fflush(stdin);
scanf("%s", &libro.autore);
libro.codice = codice++;
printf("Codice libro: %d", libro.codice);
libri[libriInseriti] = libro;
libriInseriti++;
}
|
Quando chiedi il titolo, devi inserire " scanf("%s", &libro.titolo ) ; ", o meglio se inserisci " gets( libro.titolo ) ; "
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
Marco ... il problema è quello che ha spiegato Giuseppe ... la funzione viene chiamata passando un puntatore che non punta a nessuna zona di memoria ...
Un errore grave, che indica che non si è capito come usare puntatori ed array.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
espaoloema (Normal User)
Newbie
Messaggi: 11
Iscritto: 18/02/2010
|
ho corretto...vi ringrazio x le correzioni servono x farmi apprendere di +!!!!!
ho editato il primo post!!
Ultima modifica effettuata da espaoloema il 21/02/2010 alle 20:27 |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Postato originariamente da nessuno:
Marco ... il problema è quello che ha spiegato Giuseppe ... la funzione viene chiamata passando un puntatore che non punta a nessuna zona di memoria ...
Un errore grave, che indica che non si è capito come usare puntatori ed array.
|
Lo so! Io ho trovato un secondo errore nella funzione
" void inserimento ( ) ". Che ora, stranamente non esiste più.
Inoltre, il sorgente è diventato molto confuso.
|
|
espaoloema (Normal User)
Newbie
Messaggi: 11
Iscritto: 18/02/2010
|
Postato originariamente da Poggi Marco:
Postato originariamente da nessuno:
Marco ... il problema è quello che ha spiegato Giuseppe ... la funzione viene chiamata passando un puntatore che non punta a nessuna zona di memoria ...
Un errore grave, che indica che non si è capito come usare puntatori ed array.
|
Lo so! Io ho trovato un secondo errore nella funzione
" void inserimento ( ) ". Che ora, stranamente non esiste più.
Inoltre, il sorgente è diventato molto confuso.
|
l'ho editato io...lasciando solo la void ke mi interessava...
x l errore ke mi hai segnalato, ti ringrazio..e l ho corretto... |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
Postato originariamente da espaoloema:
l'ho editato io...lasciando solo la void ke mi interessava...
x l errore ke mi hai segnalato, ti ringrazio..e l ho corretto... |
per la cronaca... non si chiamano "le void", ma "le funzioni". La parola prima del nome della funzione è il tipo del valore restituito (void significa in particolare che non restituisce alcun valore). |
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
Postato originariamente da TheKaneB:
per la cronaca... |
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|