Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Linuxin konsoli ohjelmassa bugi

Cc [22.05.2006 21:41:48]

#

Olen tässä suhteellisen aloitteleva c++ koodari ja törmäsin bugiin vahingossa omassa ohjelmassa ja en sitten keksinnyt ratkaisua siihen, että miten sen bugin saisi korjattua, joten päätin taas käänty viisaampien joukkoon...

Koodi:

#include <iostream>

int main() {
	using namespace std;
	while(1)
	{
		int valinta = 0;
		cout << endl << "Tervetuloa KOhjelmaan" << endl;
		cout << "<------------------>" << endl;
		cout << "1.Tee jotain hyödyllistä." << endl;
		cout << "2.Poistu ohjelmasta." << endl;
		cout << "<------------------>" << endl;
		cout << "Anna valintasi:" << endl;
		cin >> valinta;

		if(valinta == 1)
		{
			cout << "Ole onnellinen teit jotain hyödyllistä." << endl;
		}

		if(valinta == 2)
		{
			break;
		}

		if(valinta < 1 || valinta > 2)
		{
			cout << endl << "Virheellinen valinta." << endl;
			continue;
		}
	}

	return EXIT_SUCCESS;
}

Ja sitten se bugi =) jos tuossa valinta kohdassa laittaa jonkun muun kuin numeron niin päätteeni sekoaa ihan asenteella, mikä tähän olisi ratkaisu?

PS: voitteko keksiä mulle jotain harjoituksia =) kun itseltäni on ideat ohi.

Gaxx [22.05.2006 22:01:08]

#

Muuta valinta muuttujan tyyppi char:ksi. Muunna ehdot seuraavanlaisiksi:

valinta == '1'
valinta == '2'
valinta != '1' && valinta != '2'

Lisäksi suosittelisin alun tulostusoperaatioiden suorittamista loopin ulkopuolella, ellet välttämättä halua tulostaa niitä jokaisen virheellisen valinnan jälkeen.

Edit: switch - case:n käyttö olisi toki suositeltavaa.

Cc [22.05.2006 23:21:33]

#

Onko sillä switch - case rakenteella niin suuri ero if rakenteeseen, että pitäisi muuttaa, jos on niin mikä se ero on?

ja mikä noin valinnan arvot on hipsujen ('') sisällä?
onko siitä jotain erikoista hyötyä.
Kunhan kyselen näit tyhmii kyssäreit, et tietäisin mitä hyötyy niist on =)

koo [22.05.2006 23:32:03]

#

Switch-case-rakenteessa on se hyvä puoli, että ehtoa ei useinkaan tarvitse testata kuin kerran.

Jos valinta on merkkityyppinen, sitä pitää yleensä verrata merkkivakioon, sillä esimerkiksi '1' != 1.

Tässä yksi idea (ei mallikoodi) tuohon alkuperäiseen pulmaan:

if (cin >> valinta)
{
    // valinta saatiin luettua ok, oli se sitten int tai char tai...
}
else if (cin.eof() || cin.bad())
{
    // syöte loppui tai jotakin vialla, häivytään
    return;
}
else
{
    // virheellinen syöte, yritetäänpä toipua ja jatketaan seuraavalta riviltä
    cin.clear();
    cin.ignore(1000, '\n');
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta