Jump to content
Rpg²S Forum
  • 0

[C++] Problema con IF ed ELSE


marigno
 Share

Question

Okay, posto pure qui, magari c'è qualcuno nel forum pratico di C++.

Dunque, il programma che sto scrivendo è questo:

 

#include <iostream>

using namespace std;

int main()
{
float fahrenheit, celsius, litri, galimp, galus, lato, apotema, area;
string sceltaProgramma;
cout << "\37 Raccoglitore di programmi" <<
endl << "\37 Autore: Mario Ferraro" <<
endl << "\37 Versione: 0.1" << endl <<
endl;
cout << "Inserisci il numero del programma che vuoi utilizzare fra questi:" <<
endl << endl << "- Convertitore da Fahrenheit a Celsius (1)" <<
endl << "- Convertitore da litri a Galimp e Galus (2)" <<
endl << "- Calcolatore area esagono regolare (3)" <<
endl << endl << "Numero del programma: ";
cin >> sceltaProgramma;
if (sceltaProgramma == "1")
{
	cout << endl << "Hai scelto il convertitore Fahrenheit/Celsius." <<
	endl << "Inserisci la temperatura in Fahrenheit: ";
	cin >> fahrenheit;
	celsius = (fahrenheit - 32) / 9 * 5;
	cout << endl << "La temperatura equivalente in Celsius \212: " << celsius <<
	endl << endl << endl;
}
if (sceltaProgramma == "2")
{
	cout << endl << "Hai scelto il convertitore Litri/Galimp-Galus." <<
	endl << "Inserisci il valore in litri normali: ";
	cin >> litri;
	galimp = litri / 4.54609;
	galus = litri / 3.785411784;
	cout << endl << "Il valore equivalente in galloni imperiali (Imp Gal) \212: " << galimp <<
	endl << "Il valore equivalente in galloni americani (U.S. Gal) \212: " << galus <<
	endl << endl << endl;
}
if (sceltaProgramma == "3")
{
	cout << endl << "Hai scelto il calcolatore dell'area di un esagono regolare." <<
	endl << "Inserisci la misura del lato: ";
	cin >> lato;
	apotema = lato * 0.866;
	area = (lato * apotema) / 2 * 6;
	cout << "L'area dell'esagono regolare \212: " << area <<
	endl << endl << endl;
}
else
{
	cout << endl << "Errore 0x1: Devi inserire un numero di un programma esistente!" <<
	endl << endl << endl;
}
system("pause");
return(0);
}

 

In poche parole, il programma è un insieme di piccoli programmi di conversione e/o di calcolo.

Per ora ne ho inseriti solo tre, perché ho un problema con le istruzioni IF ed ELSE.

Compilando ed eseguendo il programma, nonostante inserisca un numero di programma valido (ad esempio 2), a programma concluso, mi compare la scritta: "Errore 0x1: Devi inserire un numero di un programma esistente!", che sarebbe il cout che ti viene fuori se immetti numero non associati a uno dei programmi. Non riesco a capire dove ho sbagliato, soluzioni?

 

Grazie!

Edited by Marigno
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

molto semplice

 

gli if non sono nidificati fra loro, l'ELSE appartiene solo all'ultimo IF

 

 

avresti dovuto usare una sintassi di tipo

 

 

IF
{

  BLOCCO PRIMO IF

}
else
{
  IF
  {

BLOCCO SECONDO IF

  }
  else
  {
  IF
  {

	 BLOCCO TERZO IF

  }
  else
  {
		BLOCCO ELSE FINALE
  }
  }
}

 

 

 

 

o meglio ancora uno Switch - case

 

 

 

switch(sceltaProgramma)
{
  case 1:
   blocco1
   break;

  case 2:
   blocco2
   break;
  
  case 3:
   blocco3
   break;

  default:
   blocco else
   break;
}

Edited by Testament

183.png
donatePQ.gif bYridanSiBEi27EwrQBOKvYB04IgpCwL27xIfmrh FBnono.gif

Link to comment
Share on other sites

  • 0

string è una classe

== è un operatore binario che confronta i valori, ma per i tipi complessi confronta se hanno lo stesso indirizzo.

per le stringhe devi quindi usare

sceltaProgramma.compare("1")

 

oltre ad una struttura if else migliore

if

else if

else if

else

 

edit: lo switch funziona solo per confrontare valori di tipo intero

 

switch (sceltaProgramma.at(0)){
 case '0':
break;
 case '1':
break;
 default:
break;
}

 

(o facendo uno switch su sceltaProgramma.at(0) - '0' e fare i case su gli interi 0,1,2,3)

Edited by Keroro

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

  • 0

Grazie, ragazzi!

Ho risolto sostituendo la seconda e la terza IF con ELSE IF.

In fin dei conti era ovvio, perché se non è vera la prima istruzione, allora si passa alle ELSE IF, la quale, se non è vera, lascia l'onere all'altra ELSE IF, che, a sua volta, se il numero non equivale lascia all'ultima else. Non conoscevo un'istruzione simile. :)

Ero quasi tentato di fare un ciclo per ovviare a tutti i problemi.

 

Grazie ancora! (posso utilizzare questo topic per altre domande?)

 

Ora che ci sono, avete lo schema preciso dei caratteri ASCII utilizzabili con il C++? (Ad esempio, \212 che sarebbe è). Quelli che ho trovato sul web non risultano compatibili.

 

Grazie ancora. :*

Edited by Marigno
Link to comment
Share on other sites

  • 0

'è' non è ascii

 

devi usare l'utf8 ma è un casino perché non c'è una libreria standard (o almeno, si spera ci sarà con il nuovo aggiornamento del c++ che arriverà tra qualche mese).

 

Considera però che la console di windows funziona esclusivamente in ascii

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...