RISOLTO [C] Esercizio gestione biblioteca

Stato
Discussione chiusa ad ulteriori risposte.

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
Beh i file vanno usati se è richiesta la persistenza, cioè che i contenuti non vadano persi alla terminazione del programma. Ma, se questo requisito non è specificato, potresti anche inserire le richieste direttamente in un array.
 

sare1234

Utente Attivo
262
3
Beh i file vanno usati se è richiesta la persistenza, cioè che i contenuti non vadano persi alla terminazione del programma. Ma, se questo requisito non è specificato, potresti anche inserire le richieste direttamente in un array.
okay come faccio con gli array
Post unito automaticamente:

okay come faccio con gli array
ma il prof ha detto di usare cioè che vogliamo quindi avevo usato il file
 

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
okay come faccio con gli array
Crei un array per contenere le richieste, e una funzione per aggiungere una richiesta all'array, molto semplicemente. Oppure, puoi fare una funzione che ti consenta di inserire più richieste alla volta con un ciclo for, ad esempio. L'array deve avere una dimensione sufficiente a contenere tutte le richieste che vorrai inserire, oppure potresti creare un array dinamico con i puntatori, in modo che possa crescere/decrescere a seconda delle richieste, ma non voglio complicarti troppo la vita (non so nemmeno se avete studiato questo argomento).
 

sare1234

Utente Attivo
262
3
Crei un array per contenere le richieste, e una funzione per aggiungere una richiesta all'array, molto semplicemente. Oppure, puoi fare una funzione che ti consenta di inserire più richieste alla volta con un ciclo for, ad esempio. L'array deve avere una dimensione sufficiente a contenere tutte le richieste che vorrai inserire, oppure potresti creare un array dinamico con i puntatori, in modo che possa crescere/decrescere a seconda delle richieste, ma non voglio complicarti troppo la vita (non so nemmeno se avete studiato questo argomento).
ma con le liste risulta molto difficile farlo?
 

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 con le liste risulta molto difficile farlo?
No, ti ho suggerito un array per una questione di efficienza e anche di semplicità. Però dipende da come deve funzionare il programma: cioè, tutte le richieste memorizzate in questo array/lista devono essere eseguite tutte quante una dopo l'altra, oppure solo una alla volta quando lo richiede l'utente? Te lo chiedo perché nel primo caso (non è richiesta eliminazione) è più semplice ed efficiente usare un array, nel secondo (vuoi eliminare le richieste di volta in volta che vengono esaudite) forse è meglio una lista. Dipende dal workflow del programma.
 

sare1234

Utente Attivo
262
3
No, ti ho suggerito un array per una questione di efficienza e anche di semplicità. Però dipende da come deve funzionare il programma: cioè, tutte le richieste memorizzate in questo array/lista devono essere eseguite tutte quante una dopo l'altra, oppure solo una alla volta quando lo richiede l'utente? Te lo chiedo perché nel primo caso (non è richiesta eliminazione) è più semplice ed efficiente usare un array, nel secondo (vuoi eliminare le richieste di volta in volta che vengono esaudite) forse è meglio una lista. Dipende dal workflow del programma.
il progetto questo non lo dice ma secondo me è a piacere
Post unito automaticamente:

il progetto questo non lo dice ma secondo me è a piacere
io l'inserimento della richiesta nel file già l'ho fatta mi serve prendere il titolo che è stato inserito nella richiesta e vedere se è presente nella lista dei libri
Post unito automaticamente:

il progetto questo non lo dice ma secondo me è a piacere
Post unito automaticamente:


io l'inserimento della richiesta nel file già l'ho fatta mi serve prendere il titolo che è stato inserito nella richiesta e vedere se è presente nella lista dei libri
comunque ho fatto cosi
Codice:
void ricerca (struct libri *l,char titolo[MAXTITOLO]){

int trovato = 0 ;
while (l != NULL && trovato != 1) {
 if(strcmp(l->titolo, titolo)==0) {
  printf("\nIl libro richiesto e' presente nell'archivio ed la richiesta è stata accettata quindi il libro è stato prestato con successo.\n");
 trovato=1;

}

  l = l->next;
}

  if(trovato != 1)
   printf("\nIl libro richiesto non e' presente nell'archivio la richiesta è stata rifiutata. La invitiamo ad richiederlo nei prossimi giorni.\n");

}
mentre nel main ho fatto cosi

Codice:
fd=fopen("Richieste.txt","r");
 fscanf(fd, "%s", titolo);
ricerca(lista,titolo);
lista = cancellalibri(lista, titolo);
 fclose(fd);
ma quando eseguo ciò anche se il libro è nella lista dei libri mi dice che non c'è...
 
Ultima modifica:

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
Ci sarà qualche errore. Posta tutto il codice completo sotto spoiler e con il tag CODE come ti ho mostrato prima. E, per favore, che sia indentato bene e senza righe bianche o B, altrimenti è difficile da leggere e interpretare.
 

sare1234

Utente Attivo
262
3
Ci sarà qualche errore. Posta tutto il codice completo sotto spoiler e con il tag CODE come ti ho mostrato prima. E, per favore, che sia indentato bene e senza righe bianche o B, altrimenti è difficile da leggere e interpretare.

Codice:
#ifndef funzioni_h
#define funzioni_h
#define funzioni_h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXTITOLO 20
#define MAXAUTORE 50
#define MAXNOME 255
#define MAXCOGNOME 255
#define MAXMATRICOLA 9

struct libri{
char titolo [MAXTITOLO];
char autore [MAXAUTORE];
int cod_id;
struct libri *next;
};

typedef struct libri* list;


int menu(void);
void printList(list L);
void gestioneErrore(void);
void ricerca (struct libri *l, char titolo [MAXTITOLO]);
void freeNodo(struct libri *nodo);
void freeLista(struct libri *lista);
void stampaLista(struct libri *top);
void scriviLista(struct libri *lista);
void scriviFile(FILE *fp, struct libri *lista);
list cancellalibri(list lis, char titolo[MAXTITOLO]);
struct libri *leggiFile(FILE *fp, struct libri *lista);
struct libri *nuovoNodo(char *titolo, char *autore, int cod_id);
struct libri *inserisciLista(struct libri *nodo, struct libri *lista);
list initList(char titolo[MAXTITOLO],char autore[MAXAUTORE],int cod_id);
list insertTail(list L, char titolo[MAXTITOLO], char autore[MAXAUTORE], int cod_id);

#endif
queste solo le funzioni

Codice:
#include "funzioni.h"
#define MAXNOME 255
#include <stdlib.h>
#include <string.h>
#include <stdio.h>


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



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

{



  if (lista==NULL) return nodo;

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

return lista;

}


void gestioneErrore()

{


  printf("Errore\n");


  exit(0);

}


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

{
   char titolo[MAXTITOLO];
  char autore[MAXAUTORE];
  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,char titolo[MAXTITOLO]){


int trovato = 0 ;


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

  if(strcmp(l->titolo, titolo)==0) {
     printf("\nIl libro richiesto e' presente nell'archivio ed la richiesta è stata accettata quindi il libro è stato prestato con successo.\n");
  trovato=1;

}

  l = l->next;

}


  if(trovato != 1)
   printf("\nIl libro richiesto non e' presente nell'archivio la richiesta è stata rifiutata. La invitiamo ad richiederlo nei prossimi giorni.\n");

}



list insertTail(list L, char titolo[MAXTITOLO], char autore[MAXAUTORE] ,int cod_id) {
  if (L != NULL) {
    L->next = insertTail(L->next, titolo, autore, cod_id);

  }else{
     L = initList(titolo,autore,cod_id);


}


  return L;

}


list initList(char titolo[MAXTITOLO] ,char autore[MAXAUTORE] ,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;
}



void printList(list L) {

if (L != NULL) {
  printf("%s %s %d\t\n", L->titolo, L->autore, L->cod_id );
  printList(L->next);

  }

}


void freeNodo(struct libri *nodo)

{

free((void *) nodo);
}




void freeLista(struct libri *lista)
{
if (lista != NULL) {
  freeLista(lista->next);
   freeNodo(lista);
  }
}



list cancellalibri(list lis, char titolo[MAXTITOLO])
{

if(!lis) return NULL;

    if(strcmp(lis->titolo, titolo)==0)

  {
   list tmp = lis->next;
   freeNodo(lis);
  return tmp;

   }

lis->next = cancellalibri(lis->next, titolo);

return lis;
}
questi sono i metodi

Codice:
[SPOILER]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "funzioni.h"

int main() {
  int scelta;
  FILE *fp;
  FILE *fd;
struct libri *lista=NULL; //per libri

    char titolo[50];
    char autore[20];
    int id = 0;
    int n;
   char nome[255];
   char cognome[255];
    char matricola[9];
   int i;
    int m =0; //per inserimento libri


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 archivio*/
    printList(lista);
    break;
   case 2: /* Richiesta libro*/
    printf("\nQuanti libri desideri richiedere ?");
    scanf("%d",&m);
   fd=fopen("Richieste.txt","a");
    if(fd==NULL)
      printf("Errore in scrittura\n");
else /* file aperto con successo */
{

        for(i=0;i<m;i++)
{

    printf("\nInserisci Cognome dello studente: ");
    scanf("%s",cognome);
      fprintf(fd,"cognome: %s\n",cognome);
     printf("\nInserisci il Nome dello studente: ");
    scanf("%254s",nome);
   fprintf(fd,"Nome: %s\n",nome);
    printf("\nInserisci Matricola dello studente(9 caratteri): ");
     scanf("%s",matricola);
    fprintf(fd,"Matricola: %s\n",matricola);
     printf("\nInserisci titolo del libro che si desidera richiedere: ");
      scanf("%s",titolo);
    fprintf(fd,"titolo: %s\n",titolo);
    printf("\nInserisci autore del libro che si desidera richiedere:");
      scanf("%s",autore);
    fprintf(fd,"autore: %s\n",autore);
     printf("\nInserisci codice del libro che si desidera richiedre(5 caratteri):");
    scanf("%d", &id);
     fprintf(fd,"codice: %d\n", id);
     fprintf(fd, "\n");
     printf("\nRichiesta effettuata con successo\n");


           }

     fclose(fd);

  }

  lista = insertTail (lista, titolo, autore, id);
     break;

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

            printf("\nQuanti libri vuoi restituire?:\n");
           scanf("%d", &n);
       for (int i=0; i<n; i++) {
            printf("\nInserire titolo: ");
      scanf("%49s", titolo);
          printf("\nInserire autore: ");
        scanf("%19s", autore);
       printf("\nInserire codice(5 caratteri): ");
    scanf("%d", &id);
    printf("\nLibro restituito con successo\n");
       lista = insertTail(lista, titolo, autore, id);
      }


      break ;


    case 4: /*esegui richiesta*/


        fd=fopen("Richieste.txt","r");
fscanf(fd, "%s", titolo);
   ricerca(lista,titolo);
     lista = cancellalibri(lista, titolo);
       fclose(fd);

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

     return 0;

        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*/

[/SPOILER]

questo è il main
la condizione che mi hai detto di aggiustare nel menu non mi funzionava perciò ho rimasto come già avevo messo
 

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
Non hai messo bene lo spoiler, lo puoi sistemare assicurandoti che l'indentazione sia buona?
 

sare1234

Utente Attivo
262
3
Non hai messo bene lo spoiler, lo puoi sistemare assicurandoti che l'indentazione sia buona?
fatto
Post unito automaticamente:

puoi aiutarmi a risolvere il problema del collegare il titolo nella richiesta al titolo presente nella lista e poi eliminarlo dalla lista....ed se ci sono ulteriori errori puoi aiutarmi?
Post unito automaticamente:

fatto
Post unito automaticamente:


puoi aiutarmi a risolvere il problema del collegare il titolo nella richiesta al titolo presente nella lista e poi eliminarlo dalla lista....ed se ci sono ulteriori errori puoi aiutarmi? domani devo consegnarlo
grazie in anticipo
 
Ultima modifica:
  • Mi piace
Reazioni: fabio93

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
Procediamo con ordine. Com'è fatto il file delle richieste?
 

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
vuoto...l'utente inserisce titolo ,autore nome matricola e codice e vengono scritti sul file
Sì ok, mi ero confuso. Comunque ho capito il problema: usi la stessa lista sia per la biblioteca che per memorizzare le richieste, invece ne dovresti usare due (oppure un array per le richieste). Inoltre, se guardi bene, nel for che hai scritto nel caso 2 dello switch, memorizzi i dati nella lista solo dopo il for, quindi memorizzi solo l'ultimo dato inserito, gli altri vanno persi (salvati nel file ma non nella lista). Posso suggerirti un approccio secondo me migliore? Quando l'utente sceglie 2, memorizza tutti i dati in una lista/array e alla fine la salvi nel file "Richieste.txt". Quando si seleziona 4, apri il file e lo carichi tutto in una lista, dopodiché con un ciclo esaudisci una richiesta alla volta.
 

sare1234

Utente Attivo
262
3
Sì ok, mi ero confuso. Comunque ho capito il problema: usi la stessa lista sia per la biblioteca che per memorizzare le richieste, invece ne dovresti usare due (oppure un array per le richieste). Inoltre, se guardi bene, nel for che hai scritto nel caso 2 dello switch, memorizzi i dati nella lista solo dopo il for, quindi memorizzi solo l'ultimo dato inserito, gli altri vanno persi (salvati nel file ma non nella lista). Posso suggerirti un approccio secondo me migliore? Quando l'utente sceglie 2, memorizza tutti i dati in una lista/array e alla fine la salvi nel file "Richieste.txt". Quando si seleziona 4, apri il file e lo carichi tutto in una lista, dopodiché con un ciclo esaudisci una richiesta alla volta.
nono i dati vengono inseriti tutti nel file richiesta...ho fatto delle prove tipo ho inserito due libri di una stessa persona ed i dati non vengono sovrascritto
Post unito automaticamente:

nono i dati vengono inseriti tutti nel file richiesta...ho fatto delle prove tipo ho inserito due libri di una stessa persona ed i dati non vengono sovrascritto
Quando l'utente sceglie 2, memorizza tutti i dati in una lista/array e alla fine la salvi nel file "Richieste.txt". Questo non è come ho fatto io?
Post unito automaticamente:

nono i dati vengono inseriti tutti nel file richiesta...ho fatto delle prove tipo ho inserito due libri di una stessa persona ed i dati non vengono sovrascritto
Post unito automaticamente:


Quando l'utente sceglie 2, memorizza tutti i dati in una lista/array e alla fine la salvi nel file "Richieste.txt". Questo non è come ho fatto io?
ah no io li memorizzo direttamente nel file...come faccio a memorizzarli in una lista e poi salvarli in un file?
Post unito automaticamente:

nono i dati vengono inseriti tutti nel file richiesta...ho fatto delle prove tipo ho inserito due libri di una stessa persona ed i dati non vengono sovrascritto
Post unito automaticamente:


Quando l'utente sceglie 2, memorizza tutti i dati in una lista/array e alla fine la salvi nel file "Richieste.txt". Questo non è come ho fatto io?
Post unito automaticamente:


ah no io li memorizzo direttamente nel file...come faccio a memorizzarli in una lista e poi salvarli in un file?
quindi creo una lista richieste con titolo autore, codice , nome , cognome e matricola faccio l'inserimento e poi questi dati li salvo nel file?
 
Ultima modifica:

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
nono i dati vengono inseriti tutti nel file richiesta...ho fatto delle prove
Lo so, ed è giusto, solo che pensavo volessi memorizzarli anche in una lista, visto che prima del break nel case 2 hai scritto lista = insertTail (lista, titolo, autore, id);. In effetti non ti serve, lo puoi cancellare, e tra l'altro è sbagliato perché salvavi la richiesta nella stessa lista dei libri. Ok.

Il problema è qui:
Codice:
case 4: /*esegui richiesta*/

    fd=fopen("Richieste.txt","r");
    fscanf(fd, "%s", titolo);
    ricerca(lista,titolo);
    lista = cancellalibri(lista, titolo);
    fclose(fd);

    break ;
Se stampi 'titolo' vedrai che contiene "cognome: ", perché quella è la prima stringa contenuta nel file. Nel file hai memorizzato dei record del tipo:
Codice:
cognome: Rossi
Nome: Mario
Matricola: 123456
titolo: Libro1
autore: A.Verdi
codice: 34565
tu vuoi recuperare il titolo, in questo caso 'Libro1'. Perciò devi leggere la quarta riga, e da questa prelevare solo il titolo, e non anche "titolo:". Ti faccio un esempio:
Codice:
fd=fopen("Richieste.txt","r");

char buf[30];
// legge le righe in un buffer temporaneo
for (int i = 0; i < 4; ++i)
    fgets(buf, 30, fd); 

// buf contiene "titolo: TitoloLibro"
// prendiamo solo "TitoloLibro"
sscanf(buf, "%*s %s", titolo);

ricerca(lista,titolo);
lista = cancellalibri(lista, titolo);
fclose(fd);
Questo però non risolve del tutto il problema, perché così prendi solo la prima richiesta che c'è nel file, invece dovresti mettere tutto in un ciclo e caricare tutte le richieste in un array o lista, in modo che possano essere eseguite tutte.
 
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