Oppure

Loading
07/01/13 20:53
lorenzoscarrone
#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:
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]
aaa
07/01/13 21:17
GN
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
scanf("%d", Ti);

ma
scanf("%d", &Ti);
.
aaa
07/01/13 22:23
lorenzoscarrone
avevo già provato ma mi da in output -->
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
aaa
07/01/13 22:46
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
08/01/13 11:15
TheKaneB
... 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 08/01/13 11:17
aaa
08/01/13 20:05
lorenzoscarrone
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
aaa
08/01/13 20:11
lorenzoscarrone
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?
aaa
08/01/13 20:18
TheKaneB
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 08/01/13 20:23
aaa