Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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]


PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
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


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6367
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
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
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

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?

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
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
PM Quote