Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Gestione Libreria problema
Forum - C/C++ - Gestione Libreria problema

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Ascal (Normal User)
Newbie


Messaggi: 6
Iscritto: 14/06/2011

Segnala al moderatore
Postato alle 7:52
Mercoledì, 15/06/2011
Ciao tutti, sto sviluppando un progetto per la gestione di una libreria(con possibilità di cancellazione, ricerca e prestito di un libro) in C.
Nel momento in cui vado a compilare il codice però ottengo un errore fisso di "Build main error". Il codice è il seguente:
Edit

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define k 500
  5.  
  6.  
  7.  
  8. struct data{
  9.        int gg,mm,aaaa;
  10.        }dataprest;
  11.  
  12. struct biblioteca{
  13.        char titolo[15];
  14.        char autore[500];
  15.        char editore[k];
  16.        char prestito;
  17.        struct biblioteca* next;
  18.        }libro[k];
  19.        
  20. struct biblioteca temp; // struttura di appoggio per operazione su file
  21.  
  22. typedef struct biblioteca *bookPtr;
  23. typedef struct Node root;
  24. int n=0,sel,x,disp=0,sel2,a;
  25. char continua,tit[15];
  26.  
  27. void readfile(void);
  28. void inserimento(void);
  29. void prestito (char tit[15]);
  30. int controllo (char tit[15]);
  31. void contenuto(void );
  32. void delTitle(long pos);
  33. void cerTitle(void);
  34. long ricTitle(char);
  35. void cancTitle(void);
  36. void viscontenuto(void);
  37.  
  38. FILE *fp;
  39.  
  40. int main()
  41. {
  42.     bookPtr root = NULL;
  43.     fopen(root, "r");
  44. printf("\n\n#############Biblioteca#################");    
  45.  
  46. do{
  47.     printf("\n\nMenu':");    
  48.     printf("\n\n 1:Inserimento di un nuovo libro.");
  49.     printf("\n 2:Prestito di un libro.");
  50.     printf("\n 3:Controllare se un libro e' in prestito.");
  51.     printf("\n 4:Visualizzare il numero di libri in prestito da un certo ");
  52.     printf("giorno.");
  53.     printf("\n 5:Visualizzare il contenuto dell'intera biblioteca.");
  54.     printf("\n 6:Rimuovere libro da biblioteca.");
  55.     printf("\n 7:Exit.\n");
  56.     scanf("%d",&sel);
  57.  
  58.     switch(sel)
  59.     {
  60.          case 1:
  61.              inserimento();
  62.              break;          
  63.          case 2:
  64.              printf("\n\nInserire titolo del libro da prestare\n");
  65.              fflush(stdin);
  66.              gets(tit);
  67.              prestito(tit);
  68.              break;          
  69.          case 3:
  70.              printf("\n\nInserire titolo del libro da controllare\n");
  71.              fflush(stdin);
  72.              gets(tit);    
  73.              a=controllo(tit);
  74.              switch(a)
  75.              {
  76.                  case 0:
  77.                       printf("\n\nLibro in prestito...");
  78.                       scanf("%c",&continua);
  79.                       break;
  80.                  case 1:
  81.                       printf("\n\nLibro non in prestito...");
  82.                       scanf("%c",&continua);
  83.                       break;
  84.              }
  85.              break;        
  86.          case 4:
  87.              break;          
  88.          case 5:
  89.              contenuto();
  90.              break;          
  91.          case 6:        
  92.              cancTitle();
  93.              break;                  
  94.          case 7:
  95.              
  96.               break;
  97.      }  
  98.      
  99.   }while(sel!=7);
  100.   printf("\n\n");  
  101.   system("PAUSE");     
  102.   return 0;
  103. }
  104.  
  105. void readfile(void)
  106. {
  107.      FILE *stream, *fopen();
  108.      int numBooks, anno;
  109.      stream = fopen("books.txt", "r");
  110.      stream = numBooks;
  111.      char tit, aut, edit;
  112.      if((stream = fopen("books.txt", "r"))== NULL)
  113.      {
  114.      printf("\n\nIl file books.txt non può essere aperto.\n");
  115.      exit(-1);
  116.      }
  117.      int count;
  118.      for (count = 0; count< numBooks; count++)
  119.         {
  120.          fflush(stream);
  121.          fgets(tit, '\n', stream);
  122.          fgets(aut, '\n', stream);
  123.          fgets(edit, '\n', stream);
  124.         struct biblioteca *item = malloc(sizeof(struct biblioteca));
  125.        
  126.        
  127.     }
  128.     fclose(stream);
  129. }
  130.  
  131. void cancTitle(void)
  132. {
  133.      char pausa;
  134.      char tit[15];
  135.      long pos;
  136.      printf("\n\nInserire titolo del libro da rimuovere:...");
  137.      gets(tit);
  138.     // pos = ricTitle(tit);
  139.     /* if(pos == -1) {
  140.             printf("\n\nTitolo non presente");
  141.             return;
  142.             }*/
  143.     /* fflush(stream);
  144.      fgets(tit, '\n', stream);
  145.      bookPtr p = locateNode(root, tit);
  146.      if( p== NULL)
  147.      printf("\n\nCancellazione non può essere effettuato");
  148.      else
  149.      if(root == p);
  150.      next *p;
  151.      root = p;
  152.      else
  153.         {
  154.                 bookPtr q = root;
  155.                 while (q->next != p)
  156.                         q = q->next;
  157.                 q->next = p->next;
  158.         }
  159.         delete p;*/
  160.        
  161. //}
  162.  
  163. void contenuto();
  164. printf("\nConfermare cancellazione? (S/N) ");
  165. scanf("%c", &pausa);
  166. if(pausa == 'S' || pausa == 's') {
  167.          delTitle(pos);
  168.          return;
  169.          }
  170.          }
  171.  
  172.  void delTitle(long pos)
  173. {
  174.      
  175.       gets(temp.titolo);
  176.       strcpy(temp.titolo, "");
  177.       gets(temp.autore);
  178.       strcpy(temp.editore, "");
  179.       gets(temp.editore);
  180.       strcpy(temp.autore, "");
  181.       fp= fopen("books.txt", "r+");
  182.       fseek(fp, pos, 0);
  183.       fwrite(&temp, sizeof(struct biblioteca), 1, fp);
  184.       fclose(fp);
  185.      }
  186.      
  187. void cercTitle(void)
  188. {
  189.      char pausa;
  190.      char tit;
  191.      long pos;
  192.      printf("\n\t\tRICERCA TITOLO.");
  193.      printf("\n\t\t-------\n\n");
  194.      gets(tit);
  195.      //pos = ricTitle(tit);
  196.      }
  197.      
  198. long ricTitle(char tit)
  199. {
  200.      int n;
  201.      long pos = 0L;
  202.      fp = fopen("books.txt", "r");
  203.      for(;;) {
  204.              n = fread(&temp, sizeof(struct biblioteca), 1, fp);
  205.              if( n== 0){
  206.                  fclose(fp);
  207.                  pos = -1;
  208.                  return (pos);
  209.              }
  210.             else
  211.              if(strcmp(tit, temp.titolo) == 0)
  212.              {
  213.                            pos = ftell(fp);
  214.                            fclose(fp);
  215.                            return(pos-sizeof(struct biblioteca));
  216.              }  
  217.              }
  218.              }
  219. void inserimento(void)
  220. {
  221.     n++;
  222.     printf("\n\nInserire i dati relativi al libro N. %d",n);
  223.     printf("\n\nTitolo: ");
  224.     fflush(stdin);
  225.     gets(libro[n].titolo);
  226.     libro[n].prestito='f';
  227.     printf("\n\nAutore: ");
  228.     gets(libro[n].autore);
  229.     printf("\n\nEditore: ");
  230.     gets(libro[n].editore);  
  231.     printf("\n\nDati in memoria...");
  232.     scanf("%c",&continua);          
  233. }  
  234.  
  235. void prestito(char tit[15])
  236. {
  237.     disp=0;
  238.     for(x=1;x<=n;x++)
  239.     {
  240.         if(strcmp(libro[x].titolo,tit)==0)
  241.         {
  242.             disp=1;          
  243.             if(libro[x].prestito=='f')
  244.             {
  245.                 printf("\n\nVuoi continuare con il prestito di questo libro?");
  246.                 printf("\n 1: Si.\n 2: No.\n");
  247.                 scanf("%d",&sel2);
  248.                 switch(sel2)
  249.                 {
  250.                     case 1:
  251.                         libro[x].prestito='v';
  252.                         printf("\nPrestito effettuato...");
  253.                         scanf("%c",&continua);
  254.                     case 2: break;                        
  255.                 }
  256.             }  
  257.             else
  258.             {
  259.                 printf("\nSpiacenti libro gia' in prestito...");                                    
  260.                 scanf("%c",&continua);
  261.             }
  262.         }                
  263.     }              
  264.     if (disp==0)
  265.     {
  266.         printf("\n\nSpiacenti questo libro non e' presente in ");
  267.         printf("questa biblioteca...");
  268.         scanf("%c",&continua);
  269.     }
  270. }  
  271.  
  272. int controllo(char tit[15])
  273. {
  274.     for(x=1;x<=n;x++)
  275.     {
  276.         if(strcmp(libro[x].titolo,tit)==0)
  277.         {    
  278.             if(libro[x].prestito=='v')
  279.                 a=0;
  280.             else
  281.                 a=1;
  282.         }
  283.     }    
  284.     return a;
  285. }            
  286.  
  287. void contenuto(void)
  288. {
  289.      printf("---------------------------------------------------------------");
  290.      printf("\n                       CONTENUTO BIBLIOTECA\n");
  291.      printf("---------------------------------------------------------------");
  292.      printf("\nN:libro non disponibile  S: libro disponibile\n");
  293.      printf("---------------------------------------------------------------");
  294.      printf("\n|Prestito|\tTitolo libro|\tAutore|\tEditore|\tDataPubblicazione|\n");
  295.      printf("---------------------------------------------------------------");    
  296.      for(x=1;x<=n;x++)
  297.      {
  298.      printf("\n|   %c    |",libro[x].prestito);
  299.      printf("%s|",temp.titolo);
  300.      printf("%s|", temp.autore);
  301.      printf("%s|", temp.editore);
  302.      printf("\n\n---------------------------------------------------------------");                                  
  303.      }
  304.  
  305. void viscontenuto(void)
  306. {
  307.     /* int n; char pausa;
  308.      fp = fopen("books.txt", "r");
  309.      do {
  310.        n = fread(&temp, sizeof(struct biblioteca), 1, fp);
  311.        if( n== 0) fclose(fp);
  312.       else {
  313.        contenuto();
  314.        scanf("%c", &pausa);
  315.            }*/
  316.              
  317.         }
  318.      while(n!= 0);
  319.   }



Esattamente la riga in causa è la terzultima( pos= ricTitle(tit)). Spero possiate aiutarmi.

Ultima modifica effettuata da Ascal il 15/06/2011 alle 22:23
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 8:24
Mercoledì, 15/06/2011
attenzione, il sorgente non è stato copiato del tutto. Mancano alcune funzioni!

PM Quote
Avatar
Ascal (Normal User)
Newbie


Messaggi: 6
Iscritto: 14/06/2011

Segnala al moderatore
Postato alle 13:23
Mercoledì, 15/06/2011
Ho modificato il mio post, ora c'è tutto il codice. :)

PM Quote
Avatar
inconcepibile (Member)
Newbie


Messaggi: 11
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 19:33
Mercoledì, 15/06/2011
L'errore credo sia dovuto al fatto che manca la funzione ricTitle, che io sinceramente non ho visto nel codice che hai postato.

PM Quote
Avatar
Peppe91 (Member)
Rookie


Messaggi: 41
Iscritto: 09/04/2011

Segnala al moderatore
Postato alle 21:10
Mercoledì, 15/06/2011
Manca la funzione ricTitle!!

PM Quote
Avatar
Ascal (Normal User)
Newbie


Messaggi: 6
Iscritto: 14/06/2011

Segnala al moderatore
Postato alle 22:22
Mercoledì, 15/06/2011
Avevo postato il codice sbagliato. Ora c'è tutto e comunque l'errore persiste.
Comunque vi ringrazio per le risposte immediate.

PM Quote
Avatar
Peppe91 (Member)
Rookie


Messaggi: 41
Iscritto: 09/04/2011

Segnala al moderatore
Postato alle 8:07
Giovedì, 16/06/2011
A me funziona, da parecchi warning, ma nessun errore del tipo da te segnalato, ovvero Build Main Error. Parte normalmente. Ah ho visto un paio di errori all'inizio del codice:

fopen(books.txt, "r");

non è così ma è:

fopen("books.txt", "r");

A meno che non fai una define col nome del file come:

#define libri "books.txt"
....
e poi

fopen(books.txt,"r");

PM Quote
Avatar
Ascal (Normal User)
Newbie


Messaggi: 6
Iscritto: 14/06/2011

Segnala al moderatore
Postato alle 12:44
Giovedì, 16/06/2011
Ti ringrazio! Ma funziona anche rimuovendo le "/*" che stanno a "bypassare" alcuni tratti di codice?

PM Quote
Avatar
Peppe91 (Member)
Rookie


Messaggi: 41
Iscritto: 09/04/2011

Segnala al moderatore
Postato alle 16:19
Giovedì, 16/06/2011
A me funziona bene si

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo