PDA

Visualizza la versione completa : [C]Problemi output


m3kka
18-02-2008, 22:02
Ho sviluppato un programma che calcola i primi numeri primi contenuti nei primi n numeri (inseriti a piacimento dall'utente).

Questo è il codice:


#include <stdlib.h>
#include <stdio.h>

int main()
{
long i=0, j=2, k=1, n=0, h=0;
long *a, *b;
FILE *out;

scanf("%d", &n);
a = (long *)calloc(n, sizeof(long));
b = (long *)calloc(n, sizeof(long));
out = fopen("Numeri.txt", "w");

for (i = 0; i <= n+1; i++)
{
a[i] = i;
}

b[1] = 1;
i = 2;

while(j < n)
{

while(a[j] == 0 && j < n)
j++;

if(a[j] != 0)
{
b[i]=a[j];
i++;
}

for(k = 1; k <= n/j; k++)
{
a[k*j] = 0;
}

j++;

}

h = i;

for (i = 1; i < h; i++)
{
fprintf(out, "%d\t", b[i]);
}
fclose(out);

return 0;
}

Il programma funziona se viene visualizzato a shell.
Invece se stampo l'output sul file di testo e richiedo un n > 1000 non mi vengono visualizzati i numeri all'interno del file.

Ritengo ci sia qualche errore nell'allocazione della memoria, o qualcosa di simile.
Sapreste aiutarmi?

N.B. Ho notato inoltre che se tento di stampare il risultato per n >= 9999 non viene visualizzato nemmeno dalla shell.

m3kka
19-02-2008, 20:26
Ho risolto parte del problema sostituendo calloc con malloc.
Ora se stampo in shell non ho problemi, però se cerco di stampare sul file in output lo posso fare solo fino al numero 1446.
Dal numero 1447 in poi il file diventa illeggibile (pieno di quadratini [sono su windows])

oregon
19-02-2008, 20:55
Questa linea e' sbagliata

for (i = 0; i <= n+1; i++)

deve essere (come ti ho detto in un altro thread)

for (i = 0; i < n; i++)

Usare la malloc al posto della calloc non fa alcuna differenza ...

Se il problema lo riscontri aprendo il file con notepad, potrebbe essere un bug di notepad stesso. Apri il file con un altro editor.

m3kka
19-02-2008, 21:08
Questa linea e' sbagliata

for (i = 0; i <= n+1; i++)

deve essere (come ti ho detto in un altro thread)

for (i = 0; i < n; i++)

Sì scusa, ho postato codice vecchio, avevo effettuato la correzione.



Se il problema lo riscontri aprendo il file con notepad, potrebbe essere un bug di notepad stesso. Apri il file con un altro editor.

Avevi ragione il problema si verificava con notepad.
Ti ringrazio ^^

Loading