Miért nem fogadja el ez a program az I char változót igaznak? Miért le a for ciklus végén?
Itt a kód:
for(int i=0; i<negyzet; i++){
cout<<"\n\n"<<i+1<<". negyzet"<<endl;
cout<<"Baloldalt van szabad ut?(I/N)"<<endl;
cin>>valasz;
switch(valasz){
case 1:valasz='I';
b[i]=1;
break;
case 2:valasz='N';
b[i]=0;
break;
default:
cout<<"Ez a valasz nem-nek szamit!"<<endl;
b[i]=0;
}
cout<<"\nJobboldalt van szabad ut?(I/N)"<<endl;
cin>>valasz;
switch(valasz){
case 1:valasz='I';
j[i]=1;
break;
case 2:valasz='N';
j[i]=0;
break;
default:
cout<<"Ez a valasz nem-nek szamit!"<<endl;
j[i]=0;
}
cout<<"\nElol van szabad ut?(I/N)"<<endl;
cin>>valasz;
switch(valasz){
case 1:valasz='I';
e[i]=1;
break;
case 2:valasz='N';
e[i]=0;
break;
default:
cout<<"Ez a valasz nem-nek szamit!"<<endl;
e[i]=0;
}
cout<<"\nHatul van szabad ut?(I/N)"<<endl;
cin>>valasz;
switch(valasz){
case 1:valasz='I';
h[i]=1;
break;
case 2:valasz='N';
h[i]=0;
break;
default:
cout<<"Ez a valasz nem-nek szamit!"<<endl;
h[i]=0;
}
}
int pozicio, kijutas, jobb_also_sarok;
cout<<"\nAdd meg a jobb also sarok sorszamat!"<<endl;
A switch-case szerkezetet használod rosszul.
switch (változó) {
case első_érték:
első_utasítás_blokk;
break;
case második_érték:
második_utasítás_blokk;
break;
default:
minden_más_esetben;
}
Ez kb. ezt jelenti:
if (változó == első_érték) {
első_utasítás_blokk;
} else if (változó == második_érték) {
második_utasítás_blokk;
} else {
minden_más_esetben;
}
~ ~ ~
Ennek tükrében te mi csinálsz?
switch(valasz){
case 1:valasz='I';
h[i]=1;
break;
case 2:valasz='N';
h[i]=0;
break;
default:
cout<<"Ez a valasz nem-nek szamit!"<<endl;
h[i]=0;
}
Mit jelent ez?
if (valasz==1) { // A válasz egyenlő 1-el? Nem.
valasz='I'; // Ez a valasz változó értékének 'I'-et adna, ha lefutna…
h[i]=1;
} else if (valasz==2) { // A válasz egyyenlő 2-vel? Nem.
valasz='N'; // Ez a valasz változó értékének 'N'-t adna, ha lefutna…
h[i]=0;
} else { // Ez fog lefutni, mert a valasz változó értéke nem 1 és nem 2.
cout<<"Ez a valasz nem-nek szamit!"<<endl;
h[i]=0;
}
Ezer éve nem programoztam C++-ban, de amit te akarsz, az így nézne ki:
switch(valasz) {
case 'I';
h[i]=1;
break;
case 'N':
h[i]=0;
break;
default:
cout<<"Ez a valasz nem-nek szamit!"<<endl;
h[i]=0;
}
Ami meg tömörebb és elegánsabb lenne:
if ((valasz != 'I') && (valasz != 'N')) cout<<"Ez a valasz nem-nek szamit!"<<endl;
h[i] = (valasz == 'I') ? 1 : 0;
Vagy ha nem akarsz megismerkedni a conditional/ternary operatorral, akkor:
if ((valasz != 'I') && (valasz != 'N')) cout<<"Ez a valasz nem-nek szamit!"<<endl;
if (valasz == 'I') h[i]=1; else h[i]=0;
Koncepcionális hiba: A kis „i” karaktert is nem-nek számít a programodban. :-)
tehát:
cin>>valasz;
valasz = toupper(valasz);
(Vagy átírod a feltételeket, hogy a kis „i”-t is elfogadja.)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!