PDA

Visualizza la versione completa : [C] programma lettura per righe da file - errori di compilazione


danytogo
07-01-2010, 15:11
Salve a tutti, ho cercato di scrivere un programma che mi legge per righe da due file A e B di testo i loro dati organizzati in due colonne (la prima colonna numerica "timestamp" e la seconda di strighe "AP"), che elaboro con delle operazioni e restituisco su altri due file di testo in uscita. Mi da errori di compilazione (tipo syntax error before '/' token), non so se è perchè ci sono errori o devo impostare qualcosa nel compilatore Dev-C++ IDE.
Grazie se qualcuno può provarlo.



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


int main(int argc, char *argv[])
{
FILE *fpa, *fpb, *fpouta, *fpoutb, *fpab, *fprab;
char *nomefilein;
int r, s, p, i, a, b;
int long timestamp, time_ona, time_offa, time_onb, time_offb;
int long timeavera, timeaverb, timeroama, timeroamb;
int long time_on, time_off, time_associa, time_ricorre, time_prec;
char *APa, *APb; // oppure con i vettori
char c;



printf("Inserire il nome del file A:\n");
scanf("%s", &nomefilein);
fpa=fopen(nomefilein, "r");
if(fpa==NULL){printf("Impossibile aprire il file\n");
exit(1);
}


while((a = getc(fpa))!= EOF)
{
r=0;
do{ // Read line file A
while(c!=' ') // Read timestamp A
{ timestamp=0;
for(i=0; i<10; i++)
{ fscanf(fpa, "%c", &c);
timestamp+=(c-'0')*power(10,9-i);
}
}
fscanf(fpa, "%s", &APa); // Read AP A
r=0 ? time_ona=timestamp : r++;
} while(APa != "OFF");

time_offa=timestamp;

if(r=0){ timeavera=time_offa-time_ona; //formula empirica
fpouta=fopen("mediaA.txt", "a"); //stampo risultati A out
fprintf(fpouta, "%10d\n", timeavera); //tempo medio utente A
close(fpouta);
}
else { timeroama=time_offa-time_ona; //tempo roaming A
fpouta=fopen("roamA.txt", "a");
fprintf(fpouta, "%10d\n", timeroama);
close(fpouta);
}


printf("Inserire il nome del file B:\n");
scanf("%s", &nomefilein);
fpb=fopen(nomefilein, "r");
if(fpb==NULL){printf("Impossibile aprire il file\n");
exit(2);
}

while((b = getc(fpb))!= EOF)
{ p=0;
s=0;
do{ // Read line file B
while(c!=' ') // Read timestamp B
{ timestamp=0;
for(i=0; i<10; i++)
{ fscanf(fpb, "%c", &c);
timestamp+=(c-'0')*power(10,9-i);
}
}
fscanf(fpb, "%s", &APb); // Read AP B
s=0 ? time_onb=timestamp : s++;
} while(APb != "OFF");

time_offb=timestamp;

if(s=0){ timeaverb=time_offb-time_onb; //formula empirica
fpoutb=fopen("mediaB.txt", "a"); //stampo risultati B out
fprintf(fpoutb, "%10d\n", timeaverb); //tempo medio utente B
close(fpoutb);
}
else { timeroamb=time_offb-time_onb; //tempo roaming B
fpoutb=fopen("roamB.txt", "a");
fprintf(fpoutb, "%10d\n", timeroamb);
close(fpoutb);
}

if(APa=APb && time_offb>time_ona && time_onb<time_offa)
{ time_on = (time_ona > time_onb) ? time_ona : time_onb; //max
time_off = (time_offa < time_offb) ? time_offa : time_offb; //min
time_prec = time_off;
time_associa = time_off-time_on;
fpab=fopen("AB.txt", "a"); //tempo di associaz. A B
fprintf(fpab, "%10d\n", time_associa);
close(fpab);
if(p>0){time_ricorre=time_on-time_prec; //tempo ricorrenza assoc.
fprab=fopen("RAB.txt", "a");
fprintf(fprab, "%10d\n", time_ricorre);
close(fprab);
}
}

p++; // contatore righe di B
}
fclose(fpb);
}
fclose(fpa);


system("PAUSE");
return 0;
}

Stoicenko
07-01-2010, 15:15
in C i commenti non si scrivono con i doppi /

si usa il

/* commento */

danytogo
07-01-2010, 15:29
OK, grazie, pensavo andasse bene con // perchè il compilatore me lo garficava in corsivo.
Adesso mi da solo un errore alla riga 91.

Stoicenko
07-01-2010, 16:06
alcuni compilatori lo accettano altri no.. quale usi?

a saperlo qual'è la riga 91

danytogo
07-01-2010, 16:39
Uso il DEV-C++ IDE,
adesso mi da "segmentation fault".

Stoicenko
07-01-2010, 17:32
se puoi cambialo.. è vecchio e non più sviluppato..

controlla i puntatori allora

oregon
07-01-2010, 17:48
E controlla anche che questa

if(APa=APb

non sia causa di problemi ...

Stoicenko
07-01-2010, 18:23
che non è l'unica assegnazione usata al posto di una condizione nel codice

oregon
07-01-2010, 18:39
Eh gia' ...

if(r=0)

if(s=0)

MacApp
07-01-2010, 18:55
Un classico come più volte ho segnalato anche in questo forum:
http://www.isidoroghezzi.net/assegnamento_per_sbaglio.html

insomma nei confronti mettere la costante a sinistra, e non si sbaglia mai più!
;-)

Loading