|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2013
Messaggi: 3
|
Problema compilazione codice C - "Control reaches end of non void function"
Salve a tutti,
un mio amico mi ha passato questo codice C che lui riesce a far girare correttamente mentre il mio compilatore puntualmente mi restituisce l'errore "Control reaches end of non void function". Vi posto il codice certo che la vostra esperienza mi potrà aiutare: Grazie in anticipo [ #include <stdio.h> #include <stdlib.h> #include <math.h> float m; float b; float S; float c; float TW; float CD0; float Mdr; float k; float z; int RS; float JX,JY,JZ,JXZ; int delta_e,delta_a,delta_r,beta; float p,T,ro; float ro_0=1.225; int T_0=288; int p_0=101320; int p_t=22632; int R=287; float g=9.81; float T_t=216.5; // Funzione 1 - Lettura da file .dat // Devo saltare 3 righe, e poi leggere i valori contenuti, // inserendoli nelle giuste variabili globali int leggiFileDat(char* nomeFile) { FILE* fIn; fIn = fopen(nomeFile, "r"); // r = read, così non possiamo proprio modificarlo // L'assunzione è che il file sia di testo (non binario) // Le prime 3 righe si possano saltare: char *line = NULL; size_t linecap = 0; getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); // ora ho saltato (leggendole) 3 righe // perciò inizio a popolare le mie variabili globali fscanf(fIn, "%f", &m); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &b); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &S); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &c); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &TW); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &CD0); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &Mdr); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &k); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &z); getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); fscanf(fIn, "%d", &RS); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &JX); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &JY); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &JZ); getline(&line, &linecap, fIn); fscanf(fIn, "%f", &JXZ); getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); fscanf(fIn, "%d", &delta_e); getline(&line, &linecap, fIn); fscanf(fIn, "%d", &delta_a); getline(&line, &linecap, fIn); fscanf(fIn, "%d", &delta_r); getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); getline(&line, &linecap, fIn); fscanf(fIn, "%d", &beta); // stampiamo a schermo solo per vedere se ha letto correttamente printf("[%.3f] [%.3f] [%.3f] [%.3f] [%.3f] [%.3f] [%.3f] [%.3f] [%.3f] [%d] [%.3f] [%.3f] [%.3f] [%.3f] [%d] [%d] [%d] [%d]\n ", m, b, S, c, TW, CD0, Mdr, k, z, RS, JX, JY, JZ, JXZ, delta_e, delta_a, delta_r, beta); fclose(fIn); } // Funzione 2 - Routine per l'atmosfera float pressione(float p){ if (z<=11000) return p=p_0*pow((1-(0.0065*z)/T_0),(g/(0.0065*R))); else return p=p_t*exp((-g/(R*T_t))*(z-11000)); } float temperatura(float T){ if (z<=11000) return T=T_0-0.0065*z; else return T=T_t; } /* * */ int main(int argc, char** argv) { leggiFileDat("ef16.dat"); printf("%f %f\n",pressione(p), temperatura(T)); ro=pressione(p)/(R*temperatura(T)); printf("%f",ro); return (EXIT_SUCCESS); } ] Ultima modifica di lexuspace : 12-05-2013 alle 10:12. Motivo: aggiunta parentesi quadre per il linguaggio |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Il messaggio del compilatore è abbastanza esplicito: c'è una funzione non void che termina senza restituire alcun valore; nello specifico:
int leggiFileDat(char* nomeFile)
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: May 2013
Messaggi: 3
|
Grazie mille
![]() Ho risolto aggiungendo "return=0" !!! |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Si, così funziona; anche se io avrei seguito un'altra strada, a scelta tra:
- Non far restituire nulla alla funzione, quindi void - Farle restituire un valore coerente: generalmente le funzioni che 'leggono' restituiscono il numero di entità lette, così da poter controllare in modo immediato l'avvenuta lettura al di fuori della funzione. Questioni di design, comunque. ![]()
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: May 2013
Messaggi: 3
|
Grazie per il consiglio. Ho usato poco il C in passato, ora lo sto riprendendo in mano con fatica, accetto volentieri qualsiasi consiglio da gente come voi molto più esperta di me
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:25.