Oppure

Loading
21/02/10 17:25
espaoloema
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?!?!?



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 21/02/10 19:26
aaa
21/02/10 18:11
giuseppe93
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;
aaa
21/02/10 18:25
Poggi Marco
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 ( ) " :
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 ) ; "

aaa
21/02/10 19:14
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.
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à.
21/02/10 19:21
espaoloema
ho corretto...vi ringrazio x le correzioni servono x farmi apprendere di +!!!!!

ho editato il primo post!!
Ultima modifica effettuata da espaoloema 21/02/10 19:27
aaa
21/02/10 20:36
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.
aaa
21/02/10 22:52
espaoloema
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...
aaa
22/02/10 9:57
TheKaneB
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).
aaa