Ez a program miért nem működik C++-ban?
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
string valasz;
int celsius;
int kelvin;
cout << "Celsiust akarsz Kelvinre, vagy Kelvit Celsiusra valtani?" << endl;
cin >> valasz;
if(valasz == "Celsiust Kelvinre"){
cout << "C: ";
cin >> celsius;
celsius += 273;
cout << celsius << " K" << endl;
} else if(valasz == "Kelvint Celsiusra"){
cout << "K: ";
cin >> kelvin;
kelvin -= 273;
cout << kelvin << " C" << endl;
} else {
cout << "?";
}
return 0;
}
Ugye felteszi a kérdést, ha írom hogy "Celsiust Kelvinre" vagy a "Kelvint Celsiusra" akkor viszont csak az "else"-t, a "?"-t írja ki.
De ez meg működik:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int celsius;
cout << "CELSIUS - KELVIN" << endl;
cout << "C: ";
cin >> celsius;
celsius += 273;
cout << celsius << " K" << endl;
return 0;
}
(Bocs, nem tudtam hogy hogy kell feltölteni máshogy a kodot, remelem olvashato. Azt hozza kell tennem, hogy elegge kezdo vagyok a temaban.)





Sajnálatosan ennek a magyarázata haladó szintű, te nem is fogod érteni, a többiek kedvéért írom, hogy az a baja, hogy a windows hozzáb.. egy sorvége jelet a bevitelhez, mert sorbufferelt, és entert ugye nyomsz.
Ilyen jellegű mondatot amúgy sem szabad várni bemeneten, mert nem ismeri a nyelvtant a program, és ha a felhasználó nem tudja, hogy betűre pontosan ezt kell írnia...
Mivel kezdő vagy, és tanulni szeretnél még csak, ezért azt javaslom a bekérdezésre: a válasz legyen egy char, és egyetlen karaktert olvass be.
Ez lehet például az is, hogy 1 vagy 2, és akkor első meg második opciót jelent (karakter és számnál persze figyelni kell, hogy aposztrófok között legyen, azaz '1' az nem ugyanaz mint 1)
Egyéb észrevételeim a kóddal kapcsolatban, amikből tanulhatsz:
1: A cmath include-olása felesleges, nem használod.
2: A helyedben lebegőpontos számokkal (double például) dolgoznék int helyett, több lehetőséget ad a felhasználónak.
3: megtévesztő, ahogy a kelvin és a celsius változót használod, mert mindkettőbe betöltheted utána a másikat. Inkább célszerűbb lenne azt csinálnod, hogy az "átváltás" eredményét a másik változóba írod.
Tehát így:
celsius = kelvin-273;





Inkább használd az std::string::compare-t:
szóval:
valasz.compare("Celsiust Kelvinre") == 0
illetve
valasz.compare("Kelvint Celsiusra")





Köszi a válaszokat. végülis #1 javaslatai alapján ilyen lett a kódom: (működik amugy, köszi)
#include <iostream>
using namespace std;
int main()
{
char valasz;
double celsius, celsius_;
double kelvin, kelvin_;
cout << "Celsiust akarsz Kelvinre /1/, vagy Kelvit akarsz Celsiusra /2/ valtani?" << endl;
cin >> valasz;
if(valasz == '1'){
cout << "C: ";
cin >> celsius;
kelvin_ = celsius + 273.15;
cout << kelvin_ << " K" << endl;
} else if(valasz == '2'){
cout << "K: ";
cin >> kelvin;
kelvin -= 273.15;
cout << kelvin << " C" << endl;
} else {
cout << "?";
}
return 0;
}
Ez a kelvin_ és a celsius_ valtozo bevezetése nem tudom hogy mennyire volt okos, de mukodik :"D
egyebkent tenyleg koszi a segitseget. Valami ilyesmi kaliberu projekteket tudnatok ajanlani meg?
Hopsz, a az else if-ben nem irtam at a valtozokat. igy mar elvileg jo:
#include <iostream>
using namespace std;
int main()
{
char valasz;
double celsius, celsius_;
double kelvin, kelvin_;
cout << "Celsiust akarsz Kelvinre /1/, vagy Kelvit akarsz Celsiusra /2/ valtani?" << endl;
cin >> valasz;
if(valasz == '1'){
cout << "C: ";
cin >> celsius;
kelvin_ = celsius + 273.15;
cout << kelvin_ << " K" << endl;
} else if(valasz == '2'){
cout << "K: ";
cin >> kelvin;
celsius_ = kelvin - 273.15;
cout << celsius_ << " C" << endl;
} else {
cout << "?";
}
return 0;
}





Nem egészen értem az alulvonásra végződő változók szerepét. Én is megpróbálkoztam egy hasonló programmal, de már fáradt vagyok a lelkiismeretesebb átvizsgálásához:
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!