2012-11-16 16 views
12

chcę uzyskać ciąg liczb jeden po drugim, więc używam while pętlę z cin.get() jako funkcję, która dostaje mój cyfry jeden po drugim.Korzystanie cin.get aby uzyskać liczbę całkowitą

Ale cin.get() dostaje cyfry jako char s i choć staram się używać odlew nie mogę dostać moje zmienne zawierają wartość numrical a nie wartość ASCII od liczb, które uzyskuję jako wejście.

Odpowiedz

20

cin.get Nie można zanalizować liczb. Możesz zrobić to ręcznie - ale po co zawracać sobie głowę ponownym wdrożeniem tej funkcji, skoro już istnieje? *

int number; 
std::cin >> number; 

Na ogół operatorzy strumień (<< i >>) dbać o sformatowana wyjście i wejście, istream::get natomiast wydobywa tylko znaki surowe.


* Oczywiście, jeśli masz ponownego wdrożenia tej funkcji, nie ma nic do tego.

Aby uzyskać wartość liczbową ze znaku cyfrowego, można wykorzystać, że kody znaków dziesiętnych cyfr 0-9 są następujące po sobie. Więc następująca funkcja może przekształcać je:

int parse_digit(char digit) { 
    return digit - '0'; 
} 
+0

Ja nie wolno używać funkcji nie uczyć się na wykładach. – Quaker

+8

@Eran Oh super, jakie głupie wymaganie. Cóż, pozwól, że poprawię odpowiedź. –

+0

Funkcja 'static_cast' nie jest potrzebna. Kompilator konwertuje wartość 'char' na' int' bez informowania. –

Powiązane problemy