Allora, stamattina a mente fresca ho rifatto il programma, funziona sempre, dal primo al milionesimo numero senza errori. Sia con fread/fwrite che con fprintf/fscanf.
(rotfl)(momento di gloria per me che l'ho fatto giusto ed il proff che ha sbagliato) (rotfl)
codice:
#include <stdio.h>
int main(int argc, char *argv[]) {
if( argc != 2 ) {
printf( "Inserire 1 argomento!\n" );
return 0;
}
FILE* f = fopen( argv[1], "w+b" );
if( f == NULL ) {
printf( "Errore nell'apertura del file \"%s\"\n", argv[1] );
return 0;
}
int limit;
printf( "Quanti numeri primi si vogliono scrivere?\n? ");
scanf( "%d", &limit );
int np;
int count = 1;
for( np = 2; count <= limit ; np++ ) {
int a = 2;
while (a*a < np && (np % a) != 0) a++;
if (np == 2 || (np % a) != 0) {
fwrite(&np, sizeof(int), 1, f);
/* fprintf(f, "%d\n", np); */
fflush(f);
count++;
}
}
int k = 1;
printf("\nk - Restituisce k-esimo\n0 - Termina programma\n? " );
scanf("%d", &k);
while(k) {
fseek(f, 0, SEEK_SET);
count = 1;
while(count < k) {
count++;
fseek(f, sizeof(int), SEEK_CUR);
}
fread(&np, sizeof(int), 1, f);
/* while(count < k) {
if( fgetc(f) == '\n' )
count++;
}
fscanf(f, "%d", &np); */
fflush(f);
printf( "%d\n", np );
printf("\nk - Restituisce k-esimo\n0 - Termina programma\n? " );
scanf("%d", &k);
}
fclose(f);
return 0;
}
Ti sarei grato se potresti dare un occhiata alle parti in cui scrivo nel file e alle parti in cui leggo e dirmi se ci sono modi un po piu semplici di quelli che ho pensato io, cosi posso facilitarmi la vita in futuro e fare qualcosa di piu leggibile.
Ti ringrazio tanto.