Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Test suite [C]

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    11

    Test suite [C]

    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?

    codice:
    #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);
        }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    35,918
    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.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    11
    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).
    codice:
    #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);
    	}
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    35,918
    Sicuramente, prima della

    fp=fopen(d,"r");

    manca una

    i=0;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2017 vBulletin Solutions, Inc. All rights reserved.