Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Non riesco a trovare l'errore in questo programma
Forum - C/C++ - Non riesco a trovare l'errore in questo programma

Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 21:53
Lunedì, 07/01/2013
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. //K-->F = ( K - 273.15)* 1.8000
  5. //C-->K = (°C - 273.15)
  6.  
  7. void celsius_K(float temp)
  8. {
  9.   temp=(temp-273.15);
  10. }
  11.  
  12. void farenheit_K(float temp)
  13. {
  14.  temp=(temp/1.8000)+273.15;
  15. }
  16.  
  17. int main()
  18. {
  19. int Ti,To;
  20. float t;
  21. printf("Convertitore di Temperature:\n\n");
  22. printf("Temperatura input:\n");
  23. printf("- 1 = Celsius (°C)\n");
  24. printf("- 2 = Fareneit(°F)\n");
  25. printf("- 3 = Kelvin  ( K)\n");
  26. scanf("%d", Ti);
  27. printf("Valore temperatura:");
  28. scanf("%f", t);
  29. printf("\n\n");
  30. printf("Temperatura output:\n");
  31. printf("- 1 = Celsius (°C)\n");
  32. printf("- 2 = Farenheit(°F)\n");
  33. printf("- 3 = Kelvin  ( K)\n");
  34. scanf("%d", To);
  35. switch(Ti)
  36. {
  37.  case 1:celsius_K(t);
  38.  case 2:farenheit_K(t);
  39.  case 3:t;
  40. }
  41. switch(To)
  42. {
  43.  case 1:t=t+273.15;
  44.  case 2:t=(t-273.15)*1.8000;
  45.  case 3:t;
  46. }
  47. printf("Il valore della Temperatura è: %f \n",t);
  48. return 0;
  49. }


ecco l'output del compilatore:
Codice sorgente - presumibilmente Delphi

  1. gcc file.cc -o file
  2. file.cc: In functionint main():
  3. file.cc:26:15: warning: format ‘%d’ expects argument of typeint*, but argument 2 has typeint[-Wformat]
  4. file.cc:28:14: warning: format ‘%f’ expects argument of type ‘float*, but argument 2 has typedouble[-Wformat]
  5. file.cc:34:15: warning: format ‘%d’ expects argument of typeint*, but argument 2 has typeint[-Wformat]



<<Quando fai le cose per bene, nessuno sospetterà che tu abbia fatto realmente qualcosa>> Futurama
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 22:17
Lunedì, 07/01/2013
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

  1. scanf("%d", Ti);


ma
Codice sorgente - presumibilmente Plain Text

  1. scanf("%d", &Ti);

.


PM Quote
Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 23:23
Lunedì, 07/01/2013
avevo già provato ma mi da in output -->
Codice sorgente - presumibilmente C/C++

  1. gcc file.cc -o file
  2. /tmp/cc7xCEWA.o: nella funzione "__static_initialization_and_destruction_0(int, int)":
  3. file.cc:(.text+0x1bb): riferimento non definito a "std::ios_base::Init::Init()"
  4. file.cc:(.text+0x1d2): riferimento non definito a "std::ios_base::Init::~Init()"
  5. /tmp/cc7xCEWA.o:(.eh_frame+0x6b): riferimento non definito a "__gxx_personality_v0"
  6. collect2: error: ld returned 1 exit status



<<Quando fai le cose per bene, nessuno sospetterà che tu abbia fatto realmente qualcosa>> Futurama
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:46
Lunedì, 07/01/2013
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 ...
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 12:15
Martedì, 08/01/2013
... 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


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 21:05
Martedì, 08/01/2013
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


<<Quando fai le cose per bene, nessuno sospetterà che tu abbia fatto realmente qualcosa>> Futurama
PM Quote
Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 21:11
Martedì, 08/01/2013
Codice sorgente - presumibilmente C/C++

  1. switch(Ti)
  2. {
  3.  case 1:celsius_K(t);
  4.            break;
  5.  case 2:farenheit_K(t);
  6.            break;
  7.  case 3:t;
  8.            break;
  9.  default:
  10.             break;
  11. }


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?


<<Quando fai le cose per bene, nessuno sospetterà che tu abbia fatto realmente qualcosa>> Futurama
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 21:18
Martedì, 08/01/2013
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


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote