Zamiana char na liczby.

0

Cześć!
Właśnie robię kalkulator z wieloma opcjami i poszukuję efektywnego sposobu zamiany char na int. Robiłem to za pomocą funkcji atoi jednak zwraca ona wartość 0, dla każdego znaku, co powoduje problem przy wybraniu niewłaściwej opcji i wrzuca na stos 0. Język C.
Z góry dzięki za odp.

0

Zapoznaj się z funkcją isdigit.

0

Jeżeli ''atoi'' zwraca zero to znaczy, że nie można było dokonać konwersji, co w najbardziej zwyczajnym przapadku oznacza, że przekazujesz do niej znaki inne niż te reprezentujące cyfry.

0

Niestety funkcja isdigit czyta tylko pojedynczą cyfrę i gubi się przy większych liczbach. Na zajęciach mieliśmy taki oto kod:
int liczba;
char wybor;

wybor=getc(stdin);
if(wybor in['1''2'....'9']);
ungetc(wybor, stdin);
scanf("%d", liczba);
printf("%d", liczba);

Jednak kompilator wyrzuca mi błąd: line 10: syntax error before or at: in

0

To powinno pomóc.

#include <iostream>
#include <string>

int to_digit(char c) {
	if(c >= '0' && c <= '9') {
		return c-'0';
	}
	std::cerr << "[" << c << "] TO NIE CYFRA!11!!" << std::endl;
	return 0;
}

int to_number(std::string const &str) {
	try {
		return std::stoi(str);
	} catch(...) {}
	std::cerr << "[" << str << "] TO NIE LICZBA!11!!" << std::endl;
	return 0;
}

int main() {
	using namespace std;
	cout << to_digit('9') << endl;
	cout << to_digit('@') << endl;
	cout << to_number("-123") << endl;
	cout << to_number("-kappa") << endl;
	return 0;
}

http://ideone.com/SMRYVN
stdout

9
0
-123
0

stderr

[@] TO NIE CYFRA!11!!
[-kappa] TO NIE LICZBA!11!!

edit: to Ci nie pomoże w C; Fajnie byłoby, gdybyś w tagach albo w tekście wspomniał o języku, bo magiczna kula nie zawsze działa

0

Programujemy w C, z rozpędu wpadając w dział c i c++ zapomniałem dopisać, sorry.

0

Zapoznaj się z funkcją: strtol.

Jakie liczby obsługuje twój kalkulator? Jakie liczby uważasz za poprawne?

0
wybor=getc(stdin);
if(wybor=='0' ||wybor=='1' || wybor=='2' || wybor=='3' || wybor=='4' || wybor=='5' || wybor=='6' || wybor=='7' || 
  wybor=='8' || wybor=='9'){
  ungetc(wybor,stdin);
  scanf("%d", &liczba);
  push(&stos,liczba);
}
else{
switch(wybor)

Zrobiłem takie coś. Wszystko działa tak jak chciałem, wpisuję nawet kilku cyfrowe liczby i są one wrzucane na stos. Teraz jest tylko jeden problem przy liczbach ujemnych. Co najlepiej zrobić, aby program był w stanie je wykryć? Bo wpisując np -33 pierw odejmuje dwie pierwsze liczby ze stosu, a następnie dodaje na stos liczbę 33.

0

Spróbuj coś takiego:

int a2i(const char *s)
{
 int sign=1;
 if(*s == '-')
        sign = -1;
 s++;
 int num=0;
 while(*s)
  {
    num=((*s)-'0')+num*10;
    s++;   
  }
 return num*sign;
}

Wzięte z: http://stackoverflow.com/questions/13145777/c-char-to-int-conversion

1 użytkowników online, w tym zalogowanych: 0, gości: 1