Miért nem jó ez a kód? (c++)
#include <iostream>
using namespace std;
int main()
{
double elsoszam;
double masodikszam;
double eredmeny;
char muvelet;
cout<<"Irjon be egy szamot!"<<endl;
cin>>elsoszam;
cout<<"Irja be a muveletet!"<<endl;
cin>>muvelet;
cout<<"Irjon be egy szamot!"<<endl;
cin>>masodikszam;
if(muvelet=='+'||'-'||'*'||'/')
{
if(muvelet=='+')
{
eredmeny=elsoszam+masodikszam;
cout<<eredmeny;
}
if(muvelet=='-')
{
eredmeny=elsoszam-masodikszam;
cout<<eredmeny;
}
if(muvelet=='*')
{
muvelet=elsoszam*masodikszam;
cout<<eredmeny;
}
if(muvelet=='/')
{
eredmeny=elsoszam/masodikszam;
cout<<eredmeny;
}
}
else
{
cout<<"Ezt nem tudom ertelmeni!";
}
system("pause>nul");
}
szorzásnál egy nagyon nagy számot ír ki.pl. 5*5=5.12181e+303
Ez miért van?










Először is a
if(muvelet=='+'||'-'||'*'||'/') nem azt vizsgálja amit gondolsz, ez a feltétel sose lehet hamis, a c++ gyenge típusosságához van köze nem megyek bele a részletekbe, amit te gondolsz if ((muvelet=='+')||(muvelet=='-') ... lenne helyes.
Másodszor ne légy ilyen szétszórt, a muvelet=elsoszam*masodikszam; sor kakukktojás, de vajon miért? Ennek következtébe az eredmeny változó nem kap kezdőértéket értéket, ezért az értéke nem definiált, bármi lehet, a korábban ott lévő programobjektum hatására otthagyott memóriaszeméttől függ.





másodiknál a pont :)
Szebb megoldás lehet a switch(muvelet){
case '+':
eredmeny = elsoszam+masodikszam;
break;
....
}
cout << eredmeny;
További 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!