PDA

Visualizza la versione completa : errore in codice c


morcomucchia
16-08-2010, 14:55
ciao ho questo codice:


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

#define kFileDaLeggere "input.txt"
#define kFileDaScrivere "output.txt"
#define kLunghezzaMaxStringa 100

#define kErroreIO -1
#define kErroreMemoria -2
#define kNessunErrore 0

double numero1,numero2,numero3;
char *stringa;

int main (void);
int LeggiDaFile(void);
int ScriviSuFile(void);

int main (void)
{
int errore;

errore=LeggiDaFile();
if(errore)
return errore;
errore=ScriviSuFile();
if(errore)
return errore;

return kNessunErrore;
}

int LeggiDaFile(void)
{
FILE *ingresso;

printf("Lettura dal file %s\n",kFileDaLeggere);
ingresso=fopen(kFileDaLeggere,"r");
if(ingresso==NULL)
return kErroreIO;
stringa=calloc(kLunghezzaMaxStringa,sizeof(char));
if(stringa==NULL)
return kErroreMemoria;
fscanf(ingresso,"%lg %lg %lg %s",&numero1,&numero2,&numero3,stringa);
printf("Numero 1: %g\nNumero 2: %g\nNumero 3: %g\nStringa: %s\n",numero1,numero2,numero3,stringa);
printf("\n");
fclose(ingresso);

return kNessunErrore;
}

int ScriviSuFile(void)
{
FILE *uscita;

printf("Scrittura sul file %s\n",kFileDaScrivere);
uscita=fopen(kFileDaScrivere,"w");
if(uscita==NULL)
return kErroreIO;
fprintf(uscita,"%g %g %g %s\n",numero1,numero2,numero3,stringa);
printf("Ora puoi aprire il file %s e verificare che contenga una copia di %s\n",kFileDaScrivere,kFileDaLeggere);
printf("\n");
return kNessunErrore;
}


il problema si presenta al momento della compilazione...

nuovo.c: In function ‘LeggiDaFile’:
nuovo.c:44: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result

Alex'87
16-08-2010, 15:46
Originariamente inviato da morcomucchia
il problema si presenta al momento della compilazione...

nuovo.c: In function ‘LeggiDaFile’:
nuovo.c:44: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result È un warning, non un errore. L'eseguibile viene creato lo stesso. Ti sta semplicemente dicendo che stai ignorando il valore di ritorno della funzione fscanf: tale valore può servirti per verificare eventuali problemi con la lettura da file.

Come compili?

morcomucchia
16-08-2010, 18:41
compilo dal terminale...
comunque, se non è un errore il programma non dovrebbe partire lo stesso??

Alex'87
16-08-2010, 22:18
Originariamente inviato da morcomucchia
compilo dal terminale... Come?


Originariamente inviato da morcomucchia
comunque, se non è un errore il programma non dovrebbe partire lo stesso?? Sì, dovrebbe partire lo stesso. Ti da problemi? Prova a controllare il valore di ritorno e vedi se significa errore..

simo_85
16-08-2010, 22:42
Originariamente inviato da morcomucchia
compilo dal terminale...
Originariamente inviato da Alex'87
Come?
Sta compilando con gcc.. credo.

Alex'87
16-08-2010, 23:13
Originariamente inviato da simo_85
Sta compilando con gcc.. credo. Ok, ma vorrei che postasse il comando completo che usa per compilare (se indica opzioni particolari ovviamente, solo gcc main.c non dice niente..).

simo_85
17-08-2010, 00:02
Originariamente inviato da Alex'87
Ok, ma vorrei che postasse il comando completo che usa per compilare (se indica opzioni particolari ovviamente, solo gcc main.c non dice niente..). Ah, ok :zizi: , comunque io ho provato a compilarlo con gcc e non dà nessun warning.. Nemmeno con il flag -Wall -pedantic :spy:

LeleFT
17-08-2010, 09:54
Originariamente inviato da morcomucchia
compilo dal terminale...
comunque, se non è un errore il programma non dovrebbe partire lo stesso??

La compilazione serve a creare l'eseguibile. Per mandarlo in esecuzione si deve, appunto, avviare l'eseguibile creato.
La compilazione non manda in esecuzione il risultato dell'elaborazione.


Ciao. :ciauz:

morcomucchia
17-08-2010, 18:31
compilo con il seguente makefile:

prova: prova.c

gcc -ansi -Wall -O prova.c -o prova

pulisci:

rm-f prova.o

pulisci_tutto:

rm-f prova prova.o

YuYevon
17-08-2010, 19:32
Se il problema è solo quello, puoi tranquillamente ignorarlo, non comporta nulla. Se vuoi comunque eliminare la segnalazione di warning, o controlli il valore di ritorno della fscanf() oppure cerchi nel manuale del gcc se esiste qualche flag per mettere a tacere il compilatore... prova con -Wno-unused-result.

Loading