RISOLTO [C] Esercizio gestione biblioteca

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
Hai corretto tutti gli errori che ti avevo segnalato all'inizio? Una volta apportate tutte le correzioni, posta il codice completo ma, per favore, indentato e spaziato correttamente.
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
[B]struct[/B] libri{
[B]char[/B] titolo[30];
[B]char[/B] autore[30];
  [B]int[/B] cod_id;
[B]struct[/B] libri *next;
};
[B]typedef[/B] [B]struct[/B] libri* List;
[B]typedef[/B] [B]struct[/B] {
[B]struct[/B] libri elementi[100];
[B]int[/B] num_libri;
}Libro;

[B]void[/B] ricerca ([B]struct[/B] libri *l);
[B]int[/B] menu([B]void[/B]);
[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista);
[B]void[/B] scriviLista([B]struct[/B] libri *lista);
[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista);
[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id);
[B]void[/B] gestioneErrore([B]void[/B]);
[B]void[/B] stampaLista([B]struct[/B] libri *top);
List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B][30], [B]int[/B] cod_id);
[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista);

[B]int[/B] main(){
[B]int[/B] scelta;
FILE *fp;
[B]struct[/B] libri *lista=[B]NULL[/B];
[B]char[/B] titolo;
[B]char[/B] autore;
[B]int[/B] id;

fp = fopen("Libri.txt","r");
[B]   if[/B] (fp == [B]NULL[/B]) gestioneErrore();
      lista = leggiFile(fp, lista);
fclose(fp);
[B]while[/B]((scelta = menu())){
[B]switch[/B] (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
[B]case[/B] 1: /*stampa lista*/
       scriviLista(lista);
    [B]break[/B];
   [B]case[/B] 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/

      printf("Inserisci il titolo del libro da cercare: ");
      scanf("%s", &titolo);
     ricerca(lista);
       [B]break[/B];

[B]case[/B] 3: /* Case costruito per restituire un libro tramite codice*/
     [B]break[/B];
         printf("Inserisci il titolo del libro da restituire: ");
         scanf("%s", &titolo);
         printf("Inserisci autore del libro da restituire: ");
         scanf("%s", &autore);
         printf("Inserisci il codice del libro da restituire: ");
         scanf("%d", &id);
        lista =insertHead(lista, &titolo , &autore, id);
[B]case[/B] 4: /*esegui richiesta*/
     [B]break[/B] ;
[B]case[/B] 5: /*Se l'utente vuole uscire dalla biblioteca*/
printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");
       [B]break[/B];
[B]default[/B]: /*Se l'utente sbaglia ad inserire il numero*/
        printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
        [B]break[/B];
      } /*Fine switch*/
   } /*Fine do*/
    [B]return[/B] 0;
} /*Fine main*/


[B]int[/B] menu(){
[B]int[/B] scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/

    printf("* * * * * * * * * * * * * * * * * * *  \nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * *  \n");
printf(" 1. Mostra archivio\n");
printf(" 2. Richiedi libro\n");
printf(" 3. Restituire libro\n");
printf(" 4. Esegui richiesta\n");
printf(" 5. Uscire\n");
printf("Inserisci scelta:");
   scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
  [B]while[/B](scelta<0 || scelta>5) {     printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
  printf("Scelta: ");
scanf("%d", &scelta);
  [B]return[/B] scelta;
}
  [B]return[/B] scelta;


}

[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id)
{

  [B]struct[/B] libri *nodo;
  nodo = ([B]struct[/B] libri *) malloc([B]sizeof[/B]([B]struct[/B] libri));
  [B]if[/B] (nodo == [B]NULL[/B]) [B]return[/B] [B]NULL[/B];
strcpy(nodo->titolo,titolo);
strcpy(nodo->autore, autore);
nodo->cod_id =cod_id;
  nodo->next = [B]NULL[/B];
  [B]return[/B] nodo;
}

[B]void[/B] gestioneErrore()
{

printf("Errore\n");
  exit(0);
}


[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista)
{

  [B]char[/B] titolo[30], autore[30];
  [B]int[/B] cod_id;
  [B]struct[/B] libri *nodo;
[B]while[/B](fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){
   nodo = nuovoNodo(titolo,autore,cod_id);
    [B]if[/B] (nodo == [B]NULL[/B])
  gestioneErrore();
  lista = inserisciLista(nodo, lista);
  }
[B]return[/B] lista;
}

[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista) {

[B]while[/B] (lista!=[B]NULL[/B]) {
   fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id);
   lista = lista->next;

  }
}

[B]void[/B] stampaLista([B]struct[/B] libri *top)

{

   [B]if[/B] (top == [B]NULL[/B]) {
printf("\n--------------\n\n");
    }[B]else[/B]
   [B]if[/B] (top!=[B]NULL[/B] && top->titolo!=0) {
printf("%s %s %d", top->titolo,  top->autore, &top->cod_id);
stampaLista(top->next);
  }
}


[B]void[/B] scriviLista([B]struct[/B] libri *lista) {
   [B]while[/B] (lista!=[B]NULL[/B]) {
   printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id);

  lista = lista->next;
   {
    printf("\n");
   }

  }

}

[B]void[/B] ricerca ([B]struct[/B] libri *lista){
  [B]int[/B] trovato = 0 ;
[B]char[/B] titolo;
[B]char[/B] nome;
  [B]char[/B] matricola;
[B]while[/B] (lista != [B]NULL[/B] && trovato != 1) {
   [B]if[/B](strcmp(lista->titolo, &titolo)==0) {
printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
   trovato=1;
printf("\nInserisci nome:");
scanf("%s", &nome);
printf("\nInserisci matricola:");
  scanf("%s", &matricola);
   }
   lista = lista->next;
    }

  [B]if[/B](trovato != 1)
printf("\n Libro non trovato");
}

List initList([B]char[/B] titolo, [B]char[/B] autore, [B]int[/B] cod_id) {
List L = (List)malloc([B]sizeof[/B]([B]struct[/B] libri));
  strcpy(L->titolo, titolo);
strcpy(L->autore, autore);
   L->cod_id=cod_id;
L->next = [B]NULL[/B];
[B]return[/B] L;
}

List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B] autore[30], [B]int[/B] cod_id) {

  [B]if[/B] (L != [B]NULL[/B]) {
List G = (List )malloc([B]sizeof[/B]([B]struct[/B] libri));
strcpy(G->titolo, titolo);
strcpy(G->autore, autore);
G->cod_id=cod_id;
G->next = L;
[B]return[/B] G;
}
[B]return[/B] initList(titolo, autore,cod_id);
}

[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista)

{

  [B]if[/B] (lista==[B]NULL[/B]) [B]return[/B] nodo;
  lista->next = inserisciLista(nodo, lista->next);
  [B]return[/B] lista;
}
Post unito automaticamente:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
struct libri{
char titolo[30];
char autore[30];
int cod_id;
struct libri *next;
};
typedef struct libri* List;
typedef struct {
struct libri elementi[100];
int num_libri;
}Libro;

void ricerca (struct libri *l);
int menu(void);
struct libri *leggiFile(FILE *fp, struct libri *lista);
void scriviLista(struct libri *lista);
void scriviFile(FILE *fp, struct libri *lista);
struct libri *nuovoNodo(char *titolo,char *autore, int cod_id);
void gestioneErrore(void);
void stampaLista(struct libri *top);
List insertHead(List L, char titolo[30] ,char[30], int cod_id);
struct libri *inserisciLista(struct libri *nodo, struct libri *lista);

int main(){
int scelta;
FILE *fp;
struct libri *lista=NULL;
char titolo;
char autore;
int id;

fp = fopen("Libri.txt","r");
if (fp == NULL) gestioneErrore();
lista = leggiFile(fp, lista);
fclose(fp);
while((scelta = menu())){
switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
case 1: /*stampa lista*/
scriviLista(lista);
break;
case 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/

printf("Inserisci il titolo del libro da cercare: ");
scanf("%s", &titolo);
ricerca(lista);
break;

case 3: /* Case costruito per restituire un libro tramite codice*/
break;
printf("Inserisci il titolo del libro da restituire: ");
scanf("%s", &titolo);
printf("Inserisci autore del libro da restituire: ");
scanf("%s", &autore);
printf("Inserisci il codice del libro da restituire: ");
scanf("%d", &id);
lista =insertHead(lista, &titolo , &autore, id);
case 4: /*esegui richiesta*/
break ;
case 5: /*Se l'utente vuole uscire dalla biblioteca*/
printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");
break;
default: /*Se l'utente sbaglia ad inserire il numero*/
printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
break;
} /*Fine switch*/
} /*Fine do*/
return 0;
} /*Fine main*/


int menu(){
int scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/

printf("* * * * * * * * * * * * * * * * * * * \nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * * \n");
printf(" 1. Mostra archivio\n");
printf(" 2. Richiedi libro\n");
printf(" 3. Restituire libro\n");
printf(" 4. Esegui richiesta\n");
printf(" 5. Uscire\n");
printf("Inserisci scelta:");
scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
while(scelta<0 || scelta>5) { printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
printf("Scelta: ");
scanf("%d", &scelta);
return scelta;
}
return scelta;


}

struct libri *nuovoNodo(char *titolo,char *autore, int cod_id)
{

struct libri *nodo;
nodo = (struct libri *) malloc(sizeof(struct libri));
if (nodo == NULL) return NULL;
strcpy(nodo->titolo,titolo);
strcpy(nodo->autore, autore);
nodo->cod_id =cod_id;
nodo->next = NULL;
return nodo;
}

void gestioneErrore()
{

printf("Errore\n");
exit(0);
}


struct libri *leggiFile(FILE *fp, struct libri *lista)
{

char titolo[30], autore[30];
int cod_id;
struct libri *nodo;
while(fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){
nodo = nuovoNodo(titolo,autore,cod_id);
if (nodo == NULL)
gestioneErrore();
lista = inserisciLista(nodo, lista);
}
return lista;
}

void scriviFile(FILE *fp, struct libri *lista) {

while (lista!=NULL) {
fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id);
lista = lista->next;

}
}

void stampaLista(struct libri *top)

{

if (top == NULL) {
printf("\n--------------\n\n");
}else
if (top!=NULL && top->titolo!=0) {
printf("%s %s %d", top->titolo, top->autore, &top->cod_id);
stampaLista(top->next);
}
}


void scriviLista(struct libri *lista) {
while (lista!=NULL) {
printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id);

lista = lista->next;
{
printf("\n");
}

}

}

void ricerca (struct libri *lista){
int trovato = 0 ;
char titolo;
char nome;
char matricola;
while (lista != NULL && trovato != 1) {
if(strcmp(lista->titolo, &titolo)==0) {
printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
trovato=1;
printf("\nInserisci nome:");
scanf("%s", &nome);
printf("\nInserisci matricola:");
scanf("%s", &matricola);
}
lista = lista->next;
}

if(trovato != 1)
printf("\n Libro non trovato");
}

List initList(char titolo, char autore, int cod_id) {
List L = (List)malloc(sizeof(struct libri));
strcpy(L->titolo, titolo);
strcpy(L->autore, autore);
L->cod_id=cod_id;
L->next = NULL;
return L;
}

List insertHead(List L, char titolo[30] ,char autore[30], int cod_id) {

if (L != NULL) {
List G = (List )malloc(sizeof(struct libri));
strcpy(G->titolo, titolo);
strcpy(G->autore, autore);
G->cod_id=cod_id;
G->next = L;
return G;
}
return initList(titolo, autore,cod_id);
}

struct libri *inserisciLista(struct libri *nodo, struct libri *lista)

{

if (lista==NULL) return nodo;
lista->next = inserisciLista(nodo, lista->next);
return lista;
}
Post unito automaticamente:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
[B]struct[/B] libri{
[B]char[/B] titolo[30];
[B]char[/B] autore[30];
  [B]int[/B] cod_id;
[B]struct[/B] libri *next;
};
[B]typedef[/B] [B]struct[/B] libri* List;
[B]typedef[/B] [B]struct[/B] {
[B]struct[/B] libri elementi[100];
[B]int[/B] num_libri;
}Libro;

[B]void[/B] ricerca ([B]struct[/B] libri *l);
[B]int[/B] menu([B]void[/B]);
[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista);
[B]void[/B] scriviLista([B]struct[/B] libri *lista);
[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista);
[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id);
[B]void[/B] gestioneErrore([B]void[/B]);
[B]void[/B] stampaLista([B]struct[/B] libri *top);
List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B][30], [B]int[/B] cod_id);
[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista);

[B]int[/B] main(){
[B]int[/B] scelta;
FILE *fp;
[B]struct[/B] libri *lista=[B]NULL[/B];
[B]char[/B] titolo;
[B]char[/B] autore;
[B]int[/B] id;

fp = fopen("Libri.txt","r");
[B]   if[/B] (fp == [B]NULL[/B]) gestioneErrore();
      lista = leggiFile(fp, lista);
fclose(fp);
[B]while[/B]((scelta = menu())){
[B]switch[/B] (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
[B]case[/B] 1: /*stampa lista*/
       scriviLista(lista);
    [B]break[/B];
   [B]case[/B] 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/

      printf("Inserisci il titolo del libro da cercare: ");
      scanf("%s", &titolo);
     ricerca(lista);
       [B]break[/B];

[B]case[/B] 3: /* Case costruito per restituire un libro tramite codice*/
     [B]break[/B];
         printf("Inserisci il titolo del libro da restituire: ");
         scanf("%s", &titolo);
         printf("Inserisci autore del libro da restituire: ");
         scanf("%s", &autore);
         printf("Inserisci il codice del libro da restituire: ");
         scanf("%d", &id);
        lista =insertHead(lista, &titolo , &autore, id);
[B]case[/B] 4: /*esegui richiesta*/
     [B]break[/B] ;
[B]case[/B] 5: /*Se l'utente vuole uscire dalla biblioteca*/
printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");
       [B]break[/B];
[B]default[/B]: /*Se l'utente sbaglia ad inserire il numero*/
        printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
        [B]break[/B];
      } /*Fine switch*/
   } /*Fine do*/
    [B]return[/B] 0;
} /*Fine main*/


[B]int[/B] menu(){
[B]int[/B] scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/

    printf("* * * * * * * * * * * * * * * * * * *  \nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * *  \n");
printf(" 1. Mostra archivio\n");
printf(" 2. Richiedi libro\n");
printf(" 3. Restituire libro\n");
printf(" 4. Esegui richiesta\n");
printf(" 5. Uscire\n");
printf("Inserisci scelta:");
   scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
  [B]while[/B](scelta<0 || scelta>5) {     printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
  printf("Scelta: ");
scanf("%d", &scelta);
  [B]return[/B] scelta;
}
  [B]return[/B] scelta;


}

[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id)
{

  [B]struct[/B] libri *nodo;
  nodo = ([B]struct[/B] libri *) malloc([B]sizeof[/B]([B]struct[/B] libri));
  [B]if[/B] (nodo == [B]NULL[/B]) [B]return[/B] [B]NULL[/B];
strcpy(nodo->titolo,titolo);
strcpy(nodo->autore, autore);
nodo->cod_id =cod_id;
  nodo->next = [B]NULL[/B];
  [B]return[/B] nodo;
}

[B]void[/B] gestioneErrore()
{

printf("Errore\n");
  exit(0);
}


[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista)
{

  [B]char[/B] titolo[30], autore[30];
  [B]int[/B] cod_id;
  [B]struct[/B] libri *nodo;
[B]while[/B](fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){
   nodo = nuovoNodo(titolo,autore,cod_id);
    [B]if[/B] (nodo == [B]NULL[/B])
  gestioneErrore();
  lista = inserisciLista(nodo, lista);
  }
[B]return[/B] lista;
}

[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista) {

[B]while[/B] (lista!=[B]NULL[/B]) {
   fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id);
   lista = lista->next;

  }
}

[B]void[/B] stampaLista([B]struct[/B] libri *top)

{

   [B]if[/B] (top == [B]NULL[/B]) {
printf("\n--------------\n\n");
    }[B]else[/B]
   [B]if[/B] (top!=[B]NULL[/B] && top->titolo!=0) {
printf("%s %s %d", top->titolo,  top->autore, &top->cod_id);
stampaLista(top->next);
  }
}


[B]void[/B] scriviLista([B]struct[/B] libri *lista) {
   [B]while[/B] (lista!=[B]NULL[/B]) {
   printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id);

  lista = lista->next;
   {
    printf("\n");
   }

  }

}

[B]void[/B] ricerca ([B]struct[/B] libri *lista){
  [B]int[/B] trovato = 0 ;
[B]char[/B] titolo;
[B]char[/B] nome;
  [B]char[/B] matricola;
[B]while[/B] (lista != [B]NULL[/B] && trovato != 1) {
   [B]if[/B](strcmp(lista->titolo, &titolo)==0) {
printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
   trovato=1;
printf("\nInserisci nome:");
scanf("%s", &nome);
printf("\nInserisci matricola:");
  scanf("%s", &matricola);
   }
   lista = lista->next;
    }

  [B]if[/B](trovato != 1)
printf("\n Libro non trovato");
}

List initList([B]char[/B] titolo, [B]char[/B] autore, [B]int[/B] cod_id) {
List L = (List)malloc([B]sizeof[/B]([B]struct[/B] libri));
  strcpy(L->titolo, titolo);
strcpy(L->autore, autore);
   L->cod_id=cod_id;
L->next = [B]NULL[/B];
[B]return[/B] L;
}

List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B] autore[30], [B]int[/B] cod_id) {

  [B]if[/B] (L != [B]NULL[/B]) {
List G = (List )malloc([B]sizeof[/B]([B]struct[/B] libri));
strcpy(G->titolo, titolo);
strcpy(G->autore, autore);
G->cod_id=cod_id;
G->next = L;
[B]return[/B] G;
}
[B]return[/B] initList(titolo, autore,cod_id);
}

[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista)

{

  [B]if[/B] (lista==[B]NULL[/B]) [B]return[/B] nodo;
  lista->next = inserisciLista(nodo, lista->next);
  [B]return[/B] lista;
}
Post unito automaticamente:
le "" non indicano nulla...nel codice non ci sono ma non so perché qui le inserisce
Post unito automaticamente:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
[B]struct[/B] libri{
[B]char[/B] titolo[30];
[B]char[/B] autore[30];
  [B]int[/B] cod_id;
[B]struct[/B] libri *next;
};
[B]typedef[/B] [B]struct[/B] libri* List;
[B]typedef[/B] [B]struct[/B] {
[B]struct[/B] libri elementi[100];
[B]int[/B] num_libri;
}Libro;

[B]void[/B] ricerca ([B]struct[/B] libri *l);
[B]int[/B] menu([B]void[/B]);
[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista);
[B]void[/B] scriviLista([B]struct[/B] libri *lista);
[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista);
[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id);
[B]void[/B] gestioneErrore([B]void[/B]);
[B]void[/B] stampaLista([B]struct[/B] libri *top);
List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B][30], [B]int[/B] cod_id);
[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista);

[B]int[/B] main(){
[B]int[/B] scelta;
FILE *fp;
[B]struct[/B] libri *lista=[B]NULL[/B];
[B]char[/B] titolo;
[B]char[/B] autore;
[B]int[/B] id;

fp = fopen("Libri.txt","r");
[B]   if[/B] (fp == [B]NULL[/B]) gestioneErrore();
      lista = leggiFile(fp, lista);
fclose(fp);
[B]while[/B]((scelta = menu())){
[B]switch[/B] (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
[B]case[/B] 1: /*stampa lista*/
       scriviLista(lista);
    [B]break[/B];
   [B]case[/B] 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/

      printf("Inserisci il titolo del libro da cercare: ");
      scanf("%s", &titolo);
     ricerca(lista);
       [B]break[/B];

[B]case[/B] 3: /* Case costruito per restituire un libro tramite codice*/
     [B]break[/B];
         printf("Inserisci il titolo del libro da restituire: ");
         scanf("%s", &titolo);
         printf("Inserisci autore del libro da restituire: ");
         scanf("%s", &autore);
         printf("Inserisci il codice del libro da restituire: ");
         scanf("%d", &id);
        lista =insertHead(lista, &titolo , &autore, id);
[B]case[/B] 4: /*esegui richiesta*/
     [B]break[/B] ;
[B]case[/B] 5: /*Se l'utente vuole uscire dalla biblioteca*/
printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");
       [B]break[/B];
[B]default[/B]: /*Se l'utente sbaglia ad inserire il numero*/
        printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
        [B]break[/B];
      } /*Fine switch*/
   } /*Fine do*/
    [B]return[/B] 0;
} /*Fine main*/


[B]int[/B] menu(){
[B]int[/B] scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/

    printf("* * * * * * * * * * * * * * * * * * *  \nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * *  \n");
printf(" 1. Mostra archivio\n");
printf(" 2. Richiedi libro\n");
printf(" 3. Restituire libro\n");
printf(" 4. Esegui richiesta\n");
printf(" 5. Uscire\n");
printf("Inserisci scelta:");
   scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
  [B]while[/B](scelta<0 || scelta>5) {     printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
  printf("Scelta: ");
scanf("%d", &scelta);
  [B]return[/B] scelta;
}
  [B]return[/B] scelta;


}

[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id)
{

  [B]struct[/B] libri *nodo;
  nodo = ([B]struct[/B] libri *) malloc([B]sizeof[/B]([B]struct[/B] libri));
  [B]if[/B] (nodo == [B]NULL[/B]) [B]return[/B] [B]NULL[/B];
strcpy(nodo->titolo,titolo);
strcpy(nodo->autore, autore);
nodo->cod_id =cod_id;
  nodo->next = [B]NULL[/B];
  [B]return[/B] nodo;
}

[B]void[/B] gestioneErrore()
{

printf("Errore\n");
  exit(0);
}


[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista)
{

  [B]char[/B] titolo[30], autore[30];
  [B]int[/B] cod_id;
  [B]struct[/B] libri *nodo;
[B]while[/B](fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){
   nodo = nuovoNodo(titolo,autore,cod_id);
    [B]if[/B] (nodo == [B]NULL[/B])
  gestioneErrore();
  lista = inserisciLista(nodo, lista);
  }
[B]return[/B] lista;
}

[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista) {

[B]while[/B] (lista!=[B]NULL[/B]) {
   fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id);
   lista = lista->next;

  }
}

[B]void[/B] stampaLista([B]struct[/B] libri *top)

{

   [B]if[/B] (top == [B]NULL[/B]) {
printf("\n--------------\n\n");
    }[B]else[/B]
   [B]if[/B] (top!=[B]NULL[/B] && top->titolo!=0) {
printf("%s %s %d", top->titolo,  top->autore, &top->cod_id);
stampaLista(top->next);
  }
}


[B]void[/B] scriviLista([B]struct[/B] libri *lista) {
   [B]while[/B] (lista!=[B]NULL[/B]) {
   printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id);

  lista = lista->next;
   {
    printf("\n");
   }

  }

}

[B]void[/B] ricerca ([B]struct[/B] libri *lista){
  [B]int[/B] trovato = 0 ;
[B]char[/B] titolo;
[B]char[/B] nome;
  [B]char[/B] matricola;
[B]while[/B] (lista != [B]NULL[/B] && trovato != 1) {
   [B]if[/B](strcmp(lista->titolo, &titolo)==0) {
printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
   trovato=1;
printf("\nInserisci nome:");
scanf("%s", &nome);
printf("\nInserisci matricola:");
  scanf("%s", &matricola);
   }
   lista = lista->next;
    }

  [B]if[/B](trovato != 1)
printf("\n Libro non trovato");
}

List initList([B]char[/B] titolo, [B]char[/B] autore, [B]int[/B] cod_id) {
List L = (List)malloc([B]sizeof[/B]([B]struct[/B] libri));
  strcpy(L->titolo, titolo);
strcpy(L->autore, autore);
   L->cod_id=cod_id;
L->next = [B]NULL[/B];
[B]return[/B] L;
}

List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B] autore[30], [B]int[/B] cod_id) {

  [B]if[/B] (L != [B]NULL[/B]) {
List G = (List )malloc([B]sizeof[/B]([B]struct[/B] libri));
strcpy(G->titolo, titolo);
strcpy(G->autore, autore);
G->cod_id=cod_id;
G->next = L;
[B]return[/B] G;
}
[B]return[/B] initList(titolo, autore,cod_id);
}

[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista)

{

  [B]if[/B] (lista==[B]NULL[/B]) [B]return[/B] nodo;
  lista->next = inserisciLista(nodo, lista->next);
  [B]return[/B] lista;
}
Post unito automaticamente:


Post unito automaticamente:


le B tra parente non indicano nulla...nel codice non ci sono ma non so perché qui le inserisce
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
Quale di questi tre programmi è quello finale? Comunque, a parte che l'indentazione è sempre "confusa", e avresti dovuto sistemarla, ci sono i soliti errori di discordanza di tipo. In alcune parti del programma dichiari delle variabili char (come 'titolo' e 'autore') e le usi come se fossero stringhe. Una variabile di tipo char può contenere un carattere (uno solo, per l'esattezza pari a 1 byte), non una stringa! In C le stringhe si rappresentano con gli array di char (o con i puntatori con l'allocazione dinamica della memoria, ma per ora lasciamo perdere). Secondo me devi rivedere la teoria, perché altrimenti non faresti questi errori.
Nella funzione di ricerca hai fatto un po' di confusione: chiedi il titolo del libro da cercare nel main, il che fa supporre che tu lo voglia passare come parametro alla funzione. Ma non hai implementato così la funzione, che ha una variabile 'titolo' (che avrebbe dovuto essere un array) che non viene avvalorata ed è in base a quella che viene fatta la ricerca, ed è per questo che non funziona. La funzione di ricerca, dal canto suo, chiede all'utente nome e matricola, ma, a parte che lo fa nel ciclo (e non ho capito perché, dato che se questi parametri ti servono per la ricerca li dovevi chiedere prima del ciclo), non li usa mai, quindi sono inutili.
Ti invito a guardare gli errori e i warning che il compilatore ti segnala, è fondamentale per capire gli errori nel codice, ed è una cosa che devi acquisire al di là di questo esercizio.
 

sare1234

Utente Attivo
262
3
Quale di questi tre programmi è quello finale? Comunque, a parte che l'indentazione è sempre "confusa", e avresti dovuto sistemarla, ci sono i soliti errori di discordanza di tipo. In alcune parti del programma dichiari delle variabili char (come 'titolo' e 'autore') e le usi come se fossero stringhe. Una variabile di tipo char può contenere un carattere (uno solo, per l'esattezza pari a 1 byte), non una stringa! In C le stringhe si rappresentano con gli array di char (o con i puntatori con l'allocazione dinamica della memoria, ma per ora lasciamo perdere). Secondo me devi rivedere la teoria, perché altrimenti non faresti questi errori.
Nella funzione di ricerca hai fatto un po' di confusione: chiedi il titolo del libro da cercare nel main, il che fa supporre che tu lo voglia passare come parametro alla funzione. Ma non hai implementato così la funzione, che ha una variabile 'titolo' (che avrebbe dovuto essere un array) che non viene avvalorata ed è in base a quella che viene fatta la ricerca, ed è per questo che non funziona. La funzione di ricerca, dal canto suo, chiede all'utente nome e matricola, ma, a parte che lo fa nel ciclo (e non ho capito perché, dato che se questi parametri ti servono per la ricerca li dovevi chiedere prima del ciclo), non li usa mai, quindi sono inutili.
Ti invito a guardare gli errori e i warning che il compilatore ti segnala, è fondamentale per capire gli errori nel codice, ed è una cosa che devi acquisire al di là di questo esercizio.
l'ultimo era quello "corretto"
Post unito automaticamente:

l'ultimo era quello "corretto"
no ma la ricerca non e per l'utente e per cercare se il libro è presente nella lista se lo è allora 'utente lo richiede inserendo nome e matricola ma non è per la ricerca dello studente
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
no ma la ricerca non e per l'utente e per cercare se il libro è presente nella lista se lo è allora 'utente lo richiede inserendo nome e matricola ma non è per la ricerca dello studente
Non ho ben capito, potresti ripetere in maniera più precisa?
 

sare1234

Utente Attivo
262
3
Non ho ben capito, potresti ripetere in maniera più precisa?
l'opzione è: richiedere un libro....cioè che uno studente che richiede di prendere un libro dalla biblioteca...quindi ho pensato che il libro che l'utente richiede viene cercato e se è presente allora l'utente inserisce il nome e la matricola altrimenti ho che il libro non si trova nell'archivio
Post unito automaticamente:

l'opzione è: richiedere un libro....cioè che uno studente che richiede di prendere un libro dalla biblioteca...quindi ho pensato che il libro che l'utente richiede viene cercato e se è presente allora l'utente inserisce il nome e la matricola altrimenti ho che il libro non si trova nell'archivio
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
l'opzione è: richiedere un libro....cioè che uno studente che richiede di prendere un libro dalla biblioteca...quindi ho pensato che il libro che l'utente richiede viene cercato e se è presente allora l'utente inserisce il nome e la matricola altrimenti ho che il libro non si trova nell'archivio
Ma il nome e la matricola non vengono utilizzati dal programma, quindi a che servono? Sono 'finti'? Non mi pare sensato. Il programma lavora su una lista di libri, i dati dello studente non sono rappresentati.
 

sare1234

Utente Attivo
262
3
l'opzione è: richiedere un libro....cioè che uno studente che richiede di prendere un libro dalla biblioteca...quindi ho pensato che il libro che l'utente richiede viene cercato e se è presente allora l'utente inserisce il nome e la matricola altrimenti ho che il libro non si trova nell'archivio
Post unito automaticamente:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
struct libri{
char titolo[30];
char autore[30];

  int cod_id;


struct libri *next;


};


typedef struct libri* List;


typedef struct {


struct libri elementi[100];


int num_libri;


}Libro;





void ricerca (struct libri *l);


int menu(void);


struct libri *leggiFile(FILE *fp, struct libri *lista);


void scriviLista(struct libri *lista);


void scriviFile(FILE *fp, struct libri *lista);


struct libri *nuovoNodo(char *titolo ,char *autore, int cod_id);


void gestioneErrore(void);


void stampaLista(struct libri *top);


struct libri *inserisciLista(struct libri *nodo, struct libri *lista);





int main() {


int scelta;


FILE *fp;


struct libri *lista=NULL;


char titolo;











fp = fopen("Libri.txt","r");


if (fp == NULL) gestioneErrore();


lista = leggiFile(fp, lista);


fclose(fp);


while((scelta = menu())){


switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */


{


case 1: /*stampa lista*/


       scriviLista(lista);


    break;


   case 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/





      printf("Inserisci il titolo del libro da cercare: ");


      scanf("%s", &titolo);


       ricerca(lista);


       break;





case 3: /* Case costruito per restituire un libro tramite codice*/


     break;





case 4: /*esegui richiesta*/


     break ;





case 5: /*Se l'utente vuole uscire dalla biblioteca*/


printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");


       break;





default: /*Se l'utente sbaglia ad inserire il numero*/


        printf("Questo tasto non consente di effetuare scelte! Riprova!\n");





        break;





      } /*Fine switch*/





   } /*Fine do*/





    return scelta;





} /*Fine main*/





int menu(){


int scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/


    printf("* * * * * * * * * * * * * * * * * * *  \nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * *  \n");





    printf(" 1. Mostra archivio\n");


   printf(" 2. Richiedi libro\n");


   printf(" 3. Restituire libro\n");


    printf(" 4. Esegui richiesta\n");


    printf(" 5. Uscire\n");


    printf("Inserisci scelta:");


    scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/


   while(scelta<0 || scelta>5) {     printf("Questo tasto non consente di effetuare scelte! Riprova!\n");


      printf("Scelta: ");


      scanf("%d", &scelta);


   return scelta;





}


  return scelta;


}





struct libri *nuovoNodo(char *titolo,char *autore, int cod_id)





{





  struct libri *nodo;


  nodo = (struct libri *) malloc(sizeof(struct libri));


  if (nodo == NULL) return NULL;


  strcpy(nodo->titolo,titolo);


  strcpy(nodo->autore, autore);


  nodo->cod_id =cod_id;


  nodo->next = NULL;


  return nodo;


}





void gestioneErrore()


{


printf("Errore\n");


  exit(0);


}





struct libri *leggiFile(FILE *fp, struct libri *lista)


{





  char titolo[30], autore[30];


  int cod_id;


  struct libri *nodo;


while(fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){


   nodo = nuovoNodo(titolo,autore,cod_id);


    if (nodo == NULL)


        gestioneErrore();


    lista = inserisciLista(nodo, lista);


  }


  return lista;


}





void scriviFile(FILE *fp, struct libri *lista) {


while (lista!=NULL) {


   fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id);


    lista = lista->next;


  }


}








void scriviLista(struct libri *lista) {


   while (lista!=NULL) {


    printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id);


  lista = lista->next;


    {


    printf("\n");


     }


  }


}





void ricerca (struct libri *l){


  int trovato = 0 ;


    char titolo[30];


    char nome[15];


    char matricola[7];


while (l != NULL && trovato != 1) {


    if(strcmp(l->titolo, &titolo[30])==0) {


printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");


       trovato=1;


    printf("\nInserisci nome:");


     scanf("%s", &nome[15]);


     printf("\nInserisci matricola:");


      scanf("%s", &matricola[7]);


      }


    l = l->next;


    }





     if(trovato != 1)


        printf("\n Libro non trovato");





}





struct libri *inserisciLista(struct libri *nodo, struct libri *lista)


{


  if (lista==NULL) return nodo;


  lista->next = inserisciLista(nodo, lista->next);


  return lista;


}
ho fatto altre modifiche
Post unito automaticamente:

Ma il nome e la matricola non vengono utilizzati dal programma, quindi a che servono? Sono 'finti'? Non mi pare sensato. Il programma lavora su una lista di libri, i dati dello studente non sono rappresentati.
si ma lo studente deve esserci....devo fare una struct di studente
 
Ultima modifica da un moderatore:

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
Te lo chiedo per pietà, quando posti il codice fallo utilizzando il tag CODE (selezionabile anche dal menù) e sistema indentazione e spaziatura, altrimenti è illeggibile (non è un puntiglio, io stesso non capirei codice scritto da me se non lo indentassi opportunamente). Aiutaci ad aiutarti.
scanf("%s", &nome[15]);
Sai cosa significa questo? Che tenti di memorizzare una stringa nel quindicesimo elemento dell'array 'nome'. Dovevi scrivere scanf("%s", nome);.
Ma il compilatore non ti dice nulla? È impossibile che ti faccia compilare questo codice. Leggi i messaggi del compilatore. E come dice @Andretti60 dovresti postare i messaggi d'errore altrimenti dobbiamo fare noi uno sforzo interpretativo per capire qual è il problema e diventa difficile aiutarti.
Purtroppo non ho mai usato Xcode ma immagino che non sia diverso dagli altri ambienti di sviluppo da questo punto di vista (anche perché Xcode non è un compilatore, ma si appoggia ad un compilatore esterno, credo Clang, che di sicuro produce i messaggi d'errore e i warning necessari).
 

sare1234

Utente Attivo
262
3
Te lo chiedo per pietà, quando posti il codice fallo utilizzando il tag CODE (selezionabile anche dal menù) e sistema indentazione e spaziatura, altrimenti è illeggibile (non è un puntiglio, io stesso non capirei codice scritto da me se non lo indentassi opportunamente). Aiutaci ad aiutarti.

Sai cosa significa questo? Che tenti di memorizzare una stringa nel quindicesimo elemento dell'array 'nome'. Dovevi scrivere scanf("%s", nome);.
Ma il compilatore non ti dice nulla? È impossibile che ti faccia compilare questo codice. Leggi i messaggi del compilatore. E come dice @Andretti60 dovresti postare i messaggi d'errore altrimenti dobbiamo fare noi uno sforzo interpretativo per capire qual è il problema e diventa difficile aiutarti.
Purtroppo non ho mai usato Xcode ma immagino che non sia diverso dagli altri ambienti di sviluppo da questo punto di vista (anche perché Xcode non è un compilatore, ma si appoggia ad un compilatore esterno, credo Clang, che di sicuro produce i messaggi d'errore e i warning necessari).
dabbene ne sto utilizzando uno on line ma mi dice questo
10437133/source.c:49:15: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[30]’ [-Wformat=]
scanf("%s", &titolo);
perche?
Post unito automaticamente:

si vabbene...ne sto utilizzando uno on line ma mi dice questo
10437133/source.c:49:15: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[30]’ [-Wformat=]
scanf("%s", &titolo);
perche?
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
dabbene ne sto utilizzando uno on line ma mi dice questo
10437133/source.c:49:15: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[30]’ [-Wformat=]
scanf("%s", &titolo);
perche?
Post unito automaticamente:
Perché come ti ho scritto sin dal primo post di ieri sera non ci va la & con gli array.
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
si ora l'ho notato...aggiunto tutto e poi posso rimandarlo?
Puoi fare quello che vuoi, ci mancherebbe, il thread è tuo, però per favore indenta bene il codice. E specifica in cosa vuoi essere aiutato, cioè cos'è che non va.
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
Ma il collegamento tra lista e file e fatto bene?
In che senso? Se non ci sono errori di compilazione e warning e il programma funziona come desideri, si può concludere di sì. Poi se vogliamo discutere di scelte ingegneristiche e implementative è un altro discorso, nel senso che non c'è un solo modo giusto per fare una cosa ma tanti, ed è il programmatore a scegliere la strada che preferisce, entro certi limiti. Noto però che non hai ancora corretto varie cose (la funzione di ricerca, l'uscita dal programma, ecc.). Inoltre non hai mai usato la struct
Codice:
typedef struct {
    struct libri elementi[100];
    int num_libri;
}Libro;
Forse all'inizio volevi fare un array di libri anziché una lista puntata. Se non ti serve eliminala.
 

sare1234

Utente Attivo
262
3
In che senso? Se non ci sono errori di compilazione e warning e il programma funziona come desideri, si può concludere di sì. Poi se vogliamo discutere di scelte ingegneristiche e implementative è un altro discorso, nel senso che non c'è un solo modo giusto per fare una cosa ma tanti, ed è il programmatore a scegliere la strada che preferisce, entro certi limiti. Noto però che non hai ancora corretto varie cose (la funzione di ricerca, l'uscita dal programma, ecc.). Inoltre non hai mai usato la struct
Codice:
typedef struct {
    struct libri elementi[100];
    int num_libri;
}Libro;
Forse all'inizio volevi fare un array di libri anziché una lista puntata. Se non ti serve eliminala.
Si infatti la eliminerò e aggiungo lo studente...no perché pensavo che forse la funzione di ricerca non mi funziona perché i dati del file non sono sincronizzati con la lista
Post unito automaticamente:

Ah no in realtà mi serviva per andare ad inserire il libro nella scelta in cui si deve restituire il libro no perché pensavo che forse la funzione di ricerca non mi funziona perché i dati del file non sono sincronizzati con la lista
 
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili