drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
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++ |
struct comp { int code; char name[27]; char des[52]; int disp; struct comp *n; }; struct comp *comps = 0, *p; FILE *fw = fopen("miofile.txt", "w"); for(p = comps; p; p = p->n) { s1 = ((((float)(25 - strlen(p->name))) + 0.5) / 2); s2 = ((((float)(25 - strlen(p->name))) - 0.5) / 2); s3 = ((((float)(52 - strlen(p->des))) + 0.5) / 2); s4 = ((((float)(52 - strlen(p->des))) - 0.5) / 2) - 1; fprintf(fw, "| %09.9i ", p->code); fprintf(fw, "| %*s%.25s%*s ", s1, " ", p->name, s2, " "); fprintf(fw, "| %*s%.50s%*s ", s3, " ", p->des, s4, " "); fprintf(fw, "| %09.9i |\n", p->disp); } fclose(fw);
|
Qualche suggerimento?
Ultima modifica effettuata da drewnik99 il 24/11/2011 alle 16:28 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
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.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Certamente, utilizzando lo stesso ciclo.
Codice sorgente - presumibilmente Plain Text |
for(p = comps; p; p = p->n)
{
//codice
}
|
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Questa è la funzione di inserimento dati:
Codice sorgente - presumibilmente C/C++ |
void inserisci()
{
struct comp *p, *c, *nn = calloc(1, sizeof(struct comp));
if(!nn)
{
fputs("Memoria piena. Impossibile aggiungere il componente.\n", stderr);
}
fputs("\nInserisci il codice del componente (max. 99999999): ", stderr);
fflush(stdin);
scanf("%9i", &nn->code);
for(c = comps, p = 0; c && nn->code > c->code; p = c, c = c->n);
if(c && (nn->code == c->code))
{
fputs("Il componente esiste gia'. Impossibile aggiungere il componente.\n", stderr);
return;
}
fputs("Inserisci il nome del componente: ", stderr);
llinea(nn->name, 25);
fputs("Inserisci la descrizione del componente: ", stderr);
llinea(nn->des, 100);
fputs("Inserisci la disponibilita' del componente: ", stderr);
fflush(stdin);
scanf("%i", &nn->disp);
nn->n = c;
if(!p)
{
comps = nn;
}
else
{
p->n = nn;
}
}
int llinea(char *str, int n)
{
int c, i = 0;
fflush(stdin);
while(isspace(c = getc(stdin)));
while(c != '\n')
{
if(i < n)
{
str[i++] = c;
}
c = getc(stdin);
}
if(n == i)
{
str[i++] = (int) "*";
}
str[i] = '\0';
return i;
}
|
Ultima modifica effettuata da drewnik99 il 24/11/2011 alle 17:36 |
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
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.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|