Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84

    [C] Database per una collezione di fumetti

    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:

    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);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Perche' c'e' questa linea ...

    while(!getchar());

    che va solo dopo la scanf ... ma nel caso 4 non c'e' la scanf ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Ah ho capito... Ma non posso levarla perchè negli altri casi serve, altrimenti il programma non funziona correttamente. Come posso fare?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ponila dopo ogni scanf nei vari casi e toglila da dove sta ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.