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++ - Problema con ciclo for
Forum - C/C++ - Problema con ciclo for

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 16:27
Giovedì, 24/11/2011
Il mio problema è il seguente: un ciclo for che dovrebbere scrivere in un file gli elementi di strutture collegate, continua all'infinito.
Ecco il codice:

Codice sorgente - presumibilmente C++

  1. struct comp
  2. {
  3.     int code;
  4.     char name[27];
  5.     char des[52];
  6.     int disp;
  7.     struct comp *n;
  8. };
  9.  
  10. struct comp *comps = 0, *p;
  11.  
  12. FILE *fw = fopen("miofile.txt", "w");
  13.  
  14. for(p = comps; p; p = p->n)
  15.             {
  16.                 s1 = ((((float)(25 - strlen(p->name))) + 0.5) / 2);
  17.                 s2 = ((((float)(25 - strlen(p->name))) - 0.5) / 2);
  18.                 s3 = ((((float)(52 - strlen(p->des))) + 0.5) / 2);
  19.                 s4 = ((((float)(52 - strlen(p->des))) - 0.5) / 2) - 1;
  20.                 fprintf(fw, "|  %09.9i  ", p->code);
  21.                 fprintf(fw, "| %*s%.25s%*s ", s1, " ", p->name, s2, " ");
  22.                 fprintf(fw, "| %*s%.50s%*s ", s3, " ", p->des, s4, " ");
  23.                 fprintf(fw, "|    %09.9i    |\n", p->disp);
  24.             }
  25. fclose(fw);



Qualche suggerimento?

Ultima modifica effettuata da drewnik99 il 24/11/2011 alle 16:28
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:50
Giovedì, 24/11/2011
Così come è scritto questo ciclo non viene mai eseguito, altro che infinito.

Forse c'è altro codice che non hai mostrato ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 17:13
Giovedì, 24/11/2011
Si, scusa, questa è solo una piccola porzione di codice, ma il ciclo corrisponde interamente alla mia funzione salvataggio del mio database. Perciò, bisogna considerare che via siano delle strutture collegate da scrivere su file. Il ciclo scrive quelle che io inserisco tramite un'apposita funzione, ma continua all'infinito e il file di testo assume dimensioni stratosferiche.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:16
Giovedì, 24/11/2011
Si vede che il problema è nella costruzione della lista perché il codice del salvataggio non ha nulla di strano.

Se provi solo a visualizzare a video la lista, ci riesci?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 17:23
Giovedì, 24/11/2011
Certamente, utilizzando lo stesso ciclo.

Codice sorgente - presumibilmente Plain Text

  1. for(p = comps; p; p = p->n)
  2. {
  3. //codice
  4. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:32
Giovedì, 24/11/2011
No ... è impossibile.

Posta il codice con cui crei la lista ... e facci un esempio di input di dati per una lista ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 17:35
Giovedì, 24/11/2011
Questa è la funzione di inserimento dati:

Codice sorgente - presumibilmente C/C++

  1. void inserisci()
  2. {
  3.     struct comp *p, *c, *nn = calloc(1, sizeof(struct comp));
  4.  
  5.     if(!nn)
  6.     {
  7.         fputs("Memoria piena. Impossibile aggiungere il componente.\n", stderr);
  8.     }
  9.  
  10.     fputs("\nInserisci il codice del componente (max. 99999999): ", stderr);
  11.     fflush(stdin);
  12.     scanf("%9i", &nn->code);
  13.  
  14.     for(c = comps, p = 0; c && nn->code > c->code; p = c, c = c->n);
  15.     if(c && (nn->code == c->code))
  16.     {
  17.         fputs("Il componente esiste gia'. Impossibile aggiungere il componente.\n", stderr);
  18.         return;
  19.     }
  20.  
  21.     fputs("Inserisci il nome del componente: ", stderr);
  22.     llinea(nn->name, 25);
  23.     fputs("Inserisci la descrizione del componente: ", stderr);
  24.     llinea(nn->des, 100);
  25.     fputs("Inserisci la disponibilita' del componente: ", stderr);
  26.     fflush(stdin);
  27.     scanf("%i", &nn->disp);
  28.  
  29.     nn->n = c;
  30.     if(!p)
  31.     {
  32.         comps = nn;
  33.     }
  34.     else
  35.     {
  36.         p->n = nn;
  37.     }
  38. }
  39.  
  40. int llinea(char *str, int n)
  41. {
  42.     int c, i = 0;
  43.  
  44.     fflush(stdin);
  45.     while(isspace(c = getc(stdin)));
  46.  
  47.     while(c != '\n')
  48.     {
  49.         if(i < n)
  50.         {
  51.             str[i++] = c;
  52.         }
  53.         c = getc(stdin);
  54.     }
  55.  
  56.     if(n == i)
  57.     {
  58.         str[i++] = (int) "*";
  59.     }
  60.     str[i] = '\0';
  61.  
  62.     return i;
  63. }


Ultima modifica effettuata da drewnik99 il 24/11/2011 alle 17:36
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 17:39
Giovedì, 24/11/2011
Posso dirti di più, se guardi la discussione "Scrivere su files una lista concatenata di strutture", noterai che il programma comprende anche una funzione di salvataggio del database(in binario) e questa funziona.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:49
Giovedì, 24/11/2011
Dato che non ho molto tempo per fare "ricamo" tra tanti pezzi di codice, puoi postare un codice unico, compilabile, funzionante, con il main, da compilare subito senza errori per provarlo?



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo