PDA

Visualizza la versione completa : [C] Database per una collezione di fumetti


luci89
31-03-2008, 11:09
Salve ho realizzato questo programmino in C per allenarmi un p˛ con le strutture. Sembra che funzioni bene (ditemi se mi Ŕ sfuggita qualcosa). L'unico difetto che non capisco Ŕ che quando nel men¨ seleziono 4 per visualizzare tutti gli articoli, mi compare tutto l'elenco regolarmente ma non riparte il men¨ subito dopo. Mi compare il trattino lampeggiante e va avanti solo se premo un tasto. Come mai? Ecco il codice:



/*PROGRAMMA PER LA GESTIONE DI UN DATABASE DI FUMETTI*/

#include <stdio.h>
#include <string.h>

typedef struct {
char nome[20];
int numero;
int quantit;
float prezzo;
} fumetto;

fumetto n[100];

main()

{
int i, quantit, elem, numtemp, count=0;
char c, ntemp[20];
float prezzo, p1, p2;


do {
printf("Menu':\n");
printf("1-Inserisci fumetto\n");
printf("2-Modifica quantita'\n");
printf("3-Modifica prezzo\n");
printf("4-Visualizza tutti i fumetti\n");
printf("5-Visualizza in base al prezzo\n");
printf("6-Visualizza in base al nome\n");
printf("0-ESCI\n\n");

printf("Inserisci la scelta: ");
c=getchar();
getchar();

switch (c)
{
case '1':

printf("\nNome: ");
scanf("%s", n[count].nome);
printf("\nNumero: ");
scanf("%d", &n[count].numero);
printf("\nQuantita': ");
scanf("%d", &n[count].quantit);
printf("\nPrezzo: ");
scanf("%f", &n[count].prezzo);
++count;
break;

case '2':

printf("\nNome: ");
scanf("%s", ntemp);
printf("\nNumero: ");
scanf("%d", &numtemp);
printf("\nNuova quantita': ");
scanf("%d", &quantit);
for(i=0; i<count ; ++i)
{
if(n[i].numero == numtemp && !stricmp(n[i].nome, ntemp))
n[i].quantit = quantit;

}
break;

case '3':

printf("\nNome: ");
scanf("%s", ntemp);
printf("\nNumero: ");
scanf("%d", &numtemp);
printf("\nNuovo prezzo: ");
scanf("%f", &prezzo);
for(i=0; i<count ; ++i)
{
if(n[i].numero == numtemp && !stricmp(n[i].nome, ntemp))
n[i].prezzo = prezzo;

}
break;

case '4':

for(i=0; i<count ; ++i)
{
printf("\n%s---%d---%d---%f\n\n", n[i].nome, n[i].numero, n[i].quantit, n[i].prezzo);
}
break;

case '5':

printf("\nPrezzo 1: ");
scanf("%f", &p1);
printf("\nPrezzo 2: ");
scanf("%f", &p2);
for(i=0; i<count ; ++i)
{
if(n[i].prezzo > p1 && n[i].prezzo < p2)
{
printf("\n%s---%d---%d---%f\n\n", n[i].nome, n[i].numero, n[i].quantit, n[i].prezzo);
elem++;
}
}
printf("\n\nSono stati trovati %d articoli per un totale del %d per cento del magazzino\n\n", elem, elem*100/count);
elem=0;
break;

case '6':

printf("\nNome: ");
scanf("%s", ntemp);
for(i=0; i<count ; ++i)
{

if( !stricmp(n[i].nome, ntemp))
{
printf("\n%s---%d---%d---%f\n\n", n[i].nome, n[i].numero, n[i].quantit, n[i].prezzo);
elem++;
}

}
printf("\n\nSono stati trovati %d articoli per un totale del %d per cento del magazzino\n\n", elem, elem*100/count);
elem=0;
break;


case '0':

return 0;
}
while(!getchar());
}while(n);
}

oregon
31-03-2008, 13:46
Perche' c'e' questa linea ...

while(!getchar());

che va solo dopo la scanf ... ma nel caso 4 non c'e' la scanf ...

luci89
31-03-2008, 14:56
Ah ho capito... Ma non posso levarla perchŔ negli altri casi serve, altrimenti il programma non funziona correttamente. Come posso fare?

oregon
31-03-2008, 15:01
Ponila dopo ogni scanf nei vari casi e toglila da dove sta ...

Loading