#include <iostream>
using namespace std;
string vastaus;
int main(void)
{
cout << "Kyll\x84 vai ei?\n\n";
cin >> vastaus;
if (vastaus == "joo" || "kyll\x84" || "jep" || "juu")
{
cout << "\n\nVastasit my\x94nteisesti.";
cin.get();
cin.get();
}
else
{
cout << "\n\nVastasit jotain muuta.";
cin.get();
cin.get();
}
return 0;
}Tiedän että tossa koodissa on vikaa, mutta miten korjaisin sen? Kun se kysyy "Kyllä vai ei" niin vaikka vastaisin "asdasdasd" niin se tulostaa aina vaan sen "vastasit myönteisesti". Sitten on vielä tuo cin.get(). Kokeilin ensin laittaa sen vain yhden kerran mutta se oli yhtä tyhjän kanssa. Kun laitoin sen kaksi kertaa peräkkäin niin se toimi niinkuin pitikin, mutta tuo tapa on varmasti virheellinen. Mikä olisi oikeaoppinen ratkaisu siihen? Älkääkä säästelkö selityksiänne sillä olen todellakin vasta-alkaja tässä..
Ai niin.. sitten on vielä se, että jos käytän vastauksessa välilyöntiä niin se jotenkin poistaa cin.get:n, tai ainakin vaikutus on samantapainen. Mistä se mahtaa johtua?
if(vastaus == "joo" || vastaus == "kyll\x84" || vastaus == "jep" || vastaus == "juu"){
//jne...orria ei käytetä nuin ja tuo taitaa olla bittioperaatio, oikeammin se menisi näin:
if (vastaus == "joo" or vastaus == "kyll\x84" or vastaus == "jep" or vastaus == "juu")
EDIT: hias :(
Kiitos, nyt toimii muuten paitsi ton cin.get() kanssa.
Cin.getin toimimattomuus johtuu siitä, että cinin bufferissa tai vastaavassa on tietoja aiemman cin >>:n seuraksena. Kokeileppa laittaa ennen cin.get():iä komento cin.clear();
Ei auttanut toi cin.clear() :(
Ei auta cin.clear() tähän, kun sen tarkoitus on putsata streamin virhetila. Ja se on eri juttu kuin streamista lukeminen.
Haluat vissiinkin ohittaa kaiken cinissä mahdollisesti olevan röhellyksen seuraavaan riviin saakka? Auttaisiko tämä?
cin.ignore(1000, '\n');
Ja kyllä, MSVC++:lla saa periaatteessa tehtyä kaiken sen, minkä Dev-C++:llakin.
>>-operaattori lukee vain yhden sanan. Lue siis käyttäjän vastaus getline-funktiolla:
getline(cin, vastaus);
Nyt pääset tutkimaan sellaisiakin vastauksia kuin "totta kai".
Joo tämä
getline(cin, vastaus);
ratkaisi nämä 2 viimeistä ongelmaa. Ja poistin edellisestä viestistä sen kysymyksen MSVC++:sta koska taisin sittenkin tarkoittaa eri ohjelmaa :). Ja kiitos kaikille avustanne.
Aihe on jo aika vanha, joten et voi enää vastata siihen.