» »

[C++] atoi() funkcija

[C++] atoi() funkcija

nejodagreat ::

Napisal sem tele vrstice:
char a;
int x=10;
do
{
	if(isdigit(a))
		x = atoi(&a);
	else
	{
		cout<<"Izberi moznost menija: "<<endl;
		cin>>a;
	}
}
while(!isdigit(a));
cout<<x<<endl;

Gre se za console application, praktično šolski primer, ampak me vseeno zajebava...ko v spremenljivko a vpišem naprimer "9", se do-while zanka prekine, se pa ne spremeni vrednost spremenljivke x, ki še vedno ostane 10 (kot je inicializirana). Kaj delam narobe?

amacar ::

Oz da se popravim, ko prvič preveriš if(isdigit(a)), še a ni inicializiran.

Zgodovina sprememb…

  • spremenil: amacar ()

amacar ::

Kaj takšnega bi bilo pomoje boljše:
char a;
int x=10;

do
{
    cout<<"Izberi moznost menija: "<<endl;
    cin>>a;
    if(isdigit(a))
    {
        x = atoi(&a);
    }
}
while(!isdigit(a));
cout<<x<<endl;

mallard ::

Zakaj se ne bi znebil funkcij atoi() in isdigit() in poskusil prebrat iz cin-a direktno v integer?

int x = 0;
while (cout << "Izberi moznost: ",
       true) {
    if (cin >> x) {
        if (x > 0 && x < 10) break;
    } else {
       // vnos števila ni uspel
        cin.clear(); // resetiraj zastavice o napakah
        cin.sync(); // sprazni cin
    }
}

nejodagreat ::

@amacar V bistvu sem imel praktično enako kot si ti napisal, problem je bil pa v tem, da atoi funkcija kot argument jemlje samo tip char[], ne pa char - vsaj tako sem potem našel nekje na internetu.
@mallard Hvala za to rešitev, sem bolj začetnik pa nisem vedel da lahko uporabim kar if(cin>>x)...čeprav pri datotečnem toku sem pa to že uporabil ;((.

Hvala obema!

donkihod ::

Imaš pa tudi stringstream razred za take stvari počet. Poglej si << in >> operatorja.