2015-10-15 5 views
0

Я новичок в C++ и, исходя из фона C#/Java, я чувствую себя как будто испорченный.C++ - Получение байта с консоли

То, что я пытаюсь достичь здесь, - это получить данные, вводимые пользователем в виде байта (unsigned char), используя cin.

#include <iostream> 

using namespace std; 

typedef unsigned char byte; 

int main() 
{ 
    byte num = 0; 
    char exitKey = '0'; 

    cout << "Type in a number between 0 and 255.\n"; 
    cin >> num; 

    cout << "\nYour number multiplied by 2 is:\n" << (num * 2); 
    cin >> exitKey; 

    return 0; 
} 

Example

Возвращаемое значение является ASCII десятичное значение символа я напечатал. Как я могу получить фактическое значение, рассматривая значение как число?

Справка приветствуется. Благодарю.

+0

Используйте символ int или короткий тип вместо символа. – Sumeet

+0

Вы можете использовать fread на stdin? – user3109672

+0

Я бы предложил использовать 'fread'.try, используя этот оператор отладки:' printf ("% d \ n", "1"); 'может быть, это 49. Кажется, вы читали символ '1', а не число ' 1' . – LittleByBlue

ответ

3

Не имеет значения, какие типы псевдонимов вы используете, при чтении с использованием cin >> символ всегда является символом и будет читаться как символ.

Ценность, которую вы получаете, это ASCII код для персонажа '1'.

Если вы хотите прочитать его как число, используйте правильный цифровой тип данных, например int.

+0

как я сказал выше – LittleByBlue

+0

С точки зрения эффективности программы, 'unsigned short int' будет таким же эффективным, как' byte', так как 'short' занимает больше места в памяти, чем 256? –

+1

@ IsaacHili Использование 'int',' short' или даже 'long long' (или их' unsigned 'вариантов) не окажет заметного влияния на большинство современных систем ПК. Может быть, если вам нужно прочитать несколько сотен миллионов номеров, это может быть измеримо, но вряд ли даже тогда это стоит рассмотреть. –

2

Поскольку здесь используется тип данных char. Значение 1, введенное здесь, считается символом, а значение ASCII 1 (49) сохраняется и 49 * 2 = 98 печатается. Вместо char использовать int как тип данных.

+0

Спасибо за ваш ответ :) –