lorenzoscarrone (Normal User)
Pro
Messaggi: 92
Iscritto: 16/11/2011
|
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <math.h> //K-->F = ( K - 273.15)* 1.8000 //C-->K = (°C - 273.15) void celsius_K(float temp) { temp=(temp-273.15); } void farenheit_K(float temp) { temp=(temp/1.8000)+273.15; } int main() { int Ti,To; float t; printf("Convertitore di Temperature:\n\n"); printf("Temperatura input:\n"); printf("- 1 = Celsius (°C)\n"); printf("- 2 = Fareneit(°F)\n"); printf("- 3 = Kelvin ( K)\n"); scanf("%d", Ti); printf("Valore temperatura:"); scanf("%f", t); printf("\n\n"); printf("Temperatura output:\n"); printf("- 1 = Celsius (°C)\n"); printf("- 2 = Farenheit(°F)\n"); printf("- 3 = Kelvin ( K)\n"); scanf("%d", To); switch(Ti) { case 1:celsius_K(t); case 2:farenheit_K(t); case 3:t; } switch(To) { case 1:t=t+273.15; case 2:t=(t-273.15)*1.8000; case 3:t; } printf("Il valore della Temperatura è: %f \n",t); return 0; }
|
ecco l'output del compilatore:
Codice sorgente - presumibilmente Delphi |
gcc file.cc -o file file.cc: In function ‘int main()’: file.cc:26:15: warning: format ‘%d’ expects argument of type ‘int*’, but argument 2 has type ‘int’ [-Wformat] file.cc:28:14: warning: format ‘%f’ expects argument of type ‘float*’, but argument 2 has type ‘double’ [-Wformat] file.cc:34:15: warning: format ‘%d’ expects argument of type ‘int*’, but argument 2 has type ‘int’ [-Wformat]
|
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
Non sono espertissimo di C\C++, ma mi sa che nelle righe 26, 28 e 34 (come ti dice il compilatore) devi passare alla scanf non i valori delle variabili ma i puntatori, quindi, ad esempio sulla riga 26 non ci va
Codice sorgente - presumibilmente Plain Text |
ma
Codice sorgente - presumibilmente Plain Text |
. |
|
lorenzoscarrone (Normal User)
Pro
Messaggi: 92
Iscritto: 16/11/2011
|
avevo già provato ma mi da in output -->
Codice sorgente - presumibilmente C/C++ |
gcc file.cc -o file
/tmp/cc7xCEWA.o: nella funzione "__static_initialization_and_destruction_0(int, int)":
file.cc:(.text+0x1bb): riferimento non definito a "std::ios_base::Init::Init()"
file.cc:(.text+0x1d2): riferimento non definito a "std::ios_base::Init::~Init()"
/tmp/cc7xCEWA.o:(.eh_frame+0x6b): riferimento non definito a "__gxx_personality_v0"
collect2: error: ld returned 1 exit status
|
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6367
Iscritto: 03/01/2010
|
Nelle scanf ci va il puntatore come già detto.
L'altro errore lo correggi compilando con
g++ file.cc -o file
g++ -g -o file file.cc -lstdc
oppure il file sorgente deve essere
file.c e non file.cc
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
... e mettici un "break" alla fine di ogni switch-case, ed anche un default case...
e poi il primo switch non scrive da nessuna parte i risultati calcolati, ergo a che serve?
Ultima modifica effettuata da TheKaneB il 08/01/2013 alle 12:17 |
|
lorenzoscarrone (Normal User)
Pro
Messaggi: 92
Iscritto: 16/11/2011
|
grazie a tutti ho risolto il problema di compilazione! , il primo switch-case non mi scrive i risultati proprio come avevi detto come risolvo il problema? scusate le domande stupide ma ho appena cominciato con il c e non ci capisco ancora molto grazie per l'aiuto
|
|
lorenzoscarrone (Normal User)
Pro
Messaggi: 92
Iscritto: 16/11/2011
|
Codice sorgente - presumibilmente C/C++ |
switch(Ti)
{
case 1:celsius_K(t);
break;
case 2:farenheit_K(t);
break;
case 3:t;
break;
default:
break;
}
|
io pensavo che t si riassegnasse richiamando le funzioni void farenheit_K(float temp) e void celsius_K(float temp) se non è così allora come faccio?
|
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
semplice, fai:
t = celsius_K(t);
EDIT: anzi, ho riletto il tuo codice...
Fai
float celsius_K(float t)
{
return t - 273.15;
}
e poi nello switch usi t = celsius_K(t);
Se la funzione ha come tipo "void" allora non restituisce nulla, e la variabile temp che hai usato contiene solo una copia del valore originale (quindi modifichi una copia, mentre l'originale rimane immutato).
Con la mia modifica invece ti fai restituire un nuovo valore dalla funzione (tramite return) che è di tipo "float" e questo valore lo riassegni a t come ti ho mostrato.
Ultima modifica effettuata da TheKaneB il 08/01/2013 alle 21:23 |
|