PDA

Visualizza la versione completa : [C] Incomprensioni sulle strutture dati


koolk
15-09-2007, 19:14
Salve a tutti,
proseguo un thread iniziato ieri dal titolo "Newbie su puntatori e strutture". Oggi il problema lo verifico se nel mio prog voglio implementare la ricerca di un determinato libro in base al prezzo. Posto il codice:

#include <stdio.h>
#define MAXNUM 5
struct libreria
{
char titolo[30];
char autore[30];
long int prezzo;
};
struct libreria lib[MAXNUM];
void inserisci();
void ricerca(long int prz);

main()
{
long int prezzocerc;

inserisci();

printf("\nInserire il prezzo da ricercare :");
scanf("%d",&prezzocerc);

ricerca(prezzocerc);
return 0;
}

void inserisci()
{
int i;
for(i=0;i<MAXNUM;i++)
{
printf("\nInserire il titolo del libro %d :",i+1);
gets(lib[i].titolo);
printf("\nInserire l\' autore del libro %d :",i+1);
gets(lib[i].autore);
printf("\nInserire il prezzo del libro %d :",i+1);
scanf("%d",&lib[i].prezzo);

while(!getchar());
}
}

void ricerca(long int prz)
{
int i;
int trovato;

trovato -=1;
for (i=0;i<MAXNUM;i++)
{
lib[i].prezzo == prz ? trovato ++ : 0;
if (trovato)
{
puts(lib[i].titolo);
printf("\t");
puts(lib[i].autore);
printf("\t");
printf("%d",lib[i].prezzo);
printf("\t");
};
}
}

Quando do in input il prezzo da ricercare (quindi il prezzo deve essere ESATTAMENTE uno presente all'interno della tabella) mi vengono fuori un output fatto di numeri sballati, che non riguardano la stampa che io volevo.
Ancora una volta sono qui (prostrato) a chiedere in cosa sbaglio... :cry:

Grazie

andbin
15-09-2007, 19:33
Originariamente inviato da koolk
Quando do in input il prezzo da ricercare (quindi il prezzo deve essere ESATTAMENTE uno presente all'interno della tabella) mi vengono fuori un output fatto di numeri sballati, che non riguardano la stampa che io volevo.scanf: %d per int e %ld per long int. Idem per printf.

La funzione ricerca poi non mi sembra corretta. Fai un trovato -=1;, sottrai 1 a una variabile non inizializzata (quindi risultato: boh...). La riga lib[i].prezzo == prz ? trovato ++ : 0; la trovo inutile. Basta un test: se il prezzo uguale, stampa i dati, punto.

oregon
15-09-2007, 21:10
Infatti ... dovresti semplicemente scrivere



void ricerca(long int prz)
{
int i;
for (i=0;i<MAXNUM;i++)
{
if(lib[i].prezzo == prz)
{
printf("%s\t%s\t%d\n", lib[i].titolo, lib[i].autore, lib[i].prezzo);
break;
}
}
}

koolk
15-09-2007, 22:40
Grazie ragazzi :unz:

Loading