Problema fscanf Programma in C

di il
3 risposte

Problema fscanf Programma in C

Ho un problema su questo codice, non mi fa prendere i file in input dal 2° file (che chiamerò FILE2), mentre dal FILE 1 si.
mi da errore di segmentazione ecc mi potete aiutare a capire?
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#include<stdbool.h>
#define N 200

int main(int argc,char *argv[])
{
FILE *inptr, *in2ptr;

if(argc<3)
	{
	 fprintf(stderr,"uso: termostato <nomefile> giorno hh:mm temperatura\n");
	 exit(EXIT_FAILURE);
	}

if((inptr=fopen(argv[1],"r"))==NULL)
	{
	 fprintf(stderr,"Impossibile aprire %s in lettura!\n",argv[1]);
	 exit(EXIT_FAILURE);
	}if((inptr=fopen(argv[1],"r"))==NULL)

if((in2ptr=fopen("germana.txt","r"))==NULL)	
	{
	 fprintf(stderr,"Impossibile aprire germana.txt in lettura!\n");
	 exit(EXIT_FAILURE);
	}

char ing[N+1],ric[N+1],ingric[N+1];
float qua,quaric;

while(fscanf(inptr,"%s %f",ing,&qua)!=EOF)
{
	 printf("%s %.1f\n",ing,qua);
}


while(fscanf(in2ptr,"%s %s %f",ric,ingric,&quaric)!=EOF)
{
printf("\n%s %s %.1f",ric,ingric,quaric);
}
fclose(inptr);
fclose(in2ptr);
return(0);
}
i due file contengono:

FILE1:
uovo 1
olio 0.5
parmigiano 0.1

FILE2:
padellino uovo 1
frittata olio 0.3
padellino olio 0.2
frittata uovo 1
coque uovo 1
frittata parmigiano 0.2
sul terminale l'output dopo averlo compitlato è il seguente:

uovo 1.0
olio 0.5
parmigiano 0.1
Errore di segmentazione (core dump creato)
mi potete aiutare a capire? :\

3 Risposte

  • Re: Problema fscanf Programma in C

    E tu aiutaci a capire a cosa serve questa riga

    }if((inptr=fopen(argv[1],"r"))==NULL)

    che sembra non completa ...
  • Re: Problema fscanf Programma in C

    Un errore di sintassi da wajunciello grazie oregon per avermelo fatto notare era quello il problema :
  • Re: Problema fscanf Programma in C

    Oregon ti posso chiedere un'altra cosa?

    preticamente io devo prendere l'input dai 2 file e confrontarlo,sono che quando carico gli elementi in questo modo mi crea un conflitto:
    
    while(fscanf(inptr,"%s %f",ing,&qua)!=EOF)
    {
    	 printf("%s %.1f\n",ing,qua);
    while(fscanf(in2ptr,"%s %s %f",ric,ingric,&quaric)!=EOF)
    {
    if(strcmp(argv[2],ric)==0)
    {
     printf(" %s\n",ingric);
     if(strcmp(ingric,ing)==0)
     	printf(" ok\n");     //printf di controllo 
    }
    }
    }
    
    praticamente mi prende i dati come capitano.
    se lo faccio in quest'altro modo con due cicli while separati, i dati caricati dal primo ciclo non arrivano completi al secondo ciclo:
    while(fscanf(inptr,"%s %f",ing,&qua)!=EOF)
    {
    	 printf("%s %.1f\n",ing,qua);   //controllo caricamento dati
    }
    
    while(fscanf(in2ptr,"%s %s %f",ric,ingric,&quaric)!=EOF)
    {
    if(strcmp(argv[2],ric)==0)
    {
     printf(" %s\n",ingric);
     if(strcmp(ingric,ing)==0)
     	printf(" ok\n");
    }
    }
    
    mi puoi suggerire una soluzione?
Devi accedere o registrarti per scrivere nel forum
3 risposte