PDA

Visualizza la versione completa : Test suite [C]


jac
20-03-2017, 00:27
Buona sera ragazzi.
Come da titolo sto provando ad eseguire un algoritmo che funzione da test suite, il suo compito effettivo e' solo sommare i numeri che trova(ho cercato di non fare programmi troppo complicati per limitare i possibili errori).
In input per riga di comando gli indico i due file a cui deve riferirsi
(la riga � questa ./a.out testsuite.txt tc_output.txt)
quindi dovrebbe entrare nel file test suite leggere una riga per volta ovvero:
tc1
tc2
tc3

quindi entrare nei file specificati (a cui nel programma aggiungo l'estensione .txt) e leggere i loro dati e, a questo punto, effettuare la somma. Eseguita la somma il programma deve scrivere il risultato sia nel file output.txt che sul terminale.
Il problema � che il programma da errore di segmentazione(a quanto ho imparato sta provando a scrivere in aree di memoria dove risiedono file importanti come dei driver).
Usando la scanf ho notato che fino ad fp=fopen.... va tutto bene ma appena oltre(la riga sottostante in pratica)da l'errore sovracitato.
Premetto che ho gi� scritto un programma di test ma era con un file per volta e quello non da problemi.
Ritengo che in questo programma il problema sia principalmente quello di fargli leggere i file specificati nel file test suite.
Potreste farmi capire come correggere l'errore?


#include<stdio.h>int main(int argc,char **argv)
{
FILE *fp;
FILE *ts;
FILE *res;
int a[30],i=0,k=0,f;
char s[30];
{
{
if(argc!=3)
{
printf("Non posso lavorare con questo numero di parametri!\n");
return 0;
}
}
ts=fopen(argv[1],"r");
res=fopen(argv[2],"w");
{
while(!feof(ts))
{
fscanf(ts,"%s",s);//s è un array di caratteri
fp=fopen("%s.txt","r");
scanf("%d", &f);//la scanf mi servita per individuar ela porzione di codice che da errore
fscanf(fp,"%d",&a[i]);//a[i] è un array di interi
i++;
{
int s=0;
while(!feof(fp))
{
fscanf(fp,"%d",&a[s]);
k=k+a[s];
s++;
}
}
}
}
fprintf(res,"%d",k);
printf("%d\n",k);
fclose(ts);
fclose(res);
fclose(fp);
}
}

oregon
20-03-2017, 12:15
Questa linea
fp=fopen("%s.txt","r");

non ha senso. Volevi aprire il file letto in s, quindi

fp=fopen(s,"r");

se nel file c' gi l'estensione come

tc1.txt
tc2.txt

Altrimenti devi prima usare una sprintf e aggiungere il .txt per poi usare la fopen come ti ho detto.

jac
22-03-2017, 23:56
Ciao oregon.
Grazie per la tua risposta, adesso sono stato in grado di far leggere i file al programma, ma a quanto pare sorto un'altro problema: i numeri nei file non sono letti correttamente. Per quanto abbia provato in questi giorni il programma non ne vuole sapere di dare una lettura corretta e di conseguenza la somma sempre un completo disastro. In particolare nonostante io specifichi esattamente (come nel programma di test a singolo file) quando fermare la lettura lui continua imperterrito a stampare numeri enormi(da 5 a 15+ cifre).

#include<stdio.h>int main(int argc,char **argv)
{
FILE *fp;
FILE *ts;
FILE *res;
int a[30],i=0,k=0,f;
char d[30];
{
{
if(argc!=3)
{
printf("Non posso lavorare con questo numero di parametri!\n");
return 0;
}
}
ts=fopen(argv[1],"r");
res=fopen(argv[2],"w");
{
while(!feof(ts))
{int s=0;
fscanf(ts,"%s",d);//d è un array di caratteri
fp=fopen(d,"r");
fscanf(fp,"%d",&a[i]);//a[i] è un array di interi
i++;
{
int s=0;
while(!feof(fp))
{
fscanf(fp,"%d",&a[i]);
k=k+a[i];
printf("%d\n",a[i]);
i++;
}
}
}
}
fprintf(res,"%d",k);
printf("%d\n",k);
fclose(ts);
fclose(res);
fclose(fp);
}
}

oregon
24-03-2017, 13:57
Sicuramente, prima della

fp=fopen(d,"r");

manca una

i=0;

Loading