2013-12-19 2 views
3

Извините неопределенное название (я не знал, как решить проблему). В любом случае, в моем коде я явно объявлял несколько переменных, два из которых были подписаны/без знака переменными int, а остальные были подписаны/без знака char переменные типа.Значение переменной Char не отображается

Мой код:

#include <iostream> 

int main(void) 
{ 
    unsigned int number = UINT_MAX; 
    signed int number2 = INT_MAX; 
    unsigned char U = UCHAR_MAX; 
    signed char S = CHAR_MAX; 

    std::cout << number << std::endl; 
    std::cout << "The size in bytes of this variable is: " << sizeof(number) <<  std::endl << std::endl; 

    std::cout << number2 << std::endl; 
    std::cout << "The size in bytes of this variable is: " <<sizeof(number2) << std::endl << std::endl; 

    std::cout << U << std::endl; 
    std::cout << "The size in bytes of this variable is: " << sizeof(U) << std::endl 
     << std::endl; 

    std::cout << S << std::endl; 
    std::cout << "The size in bytes of this variable is: " <<sizeof(S) << std::endl << std::endl; 

    std::cin.get(); 
    std::cin.get(); 

    return 0; 
} 

К сожалению код закодирован из-за чрезмерной длины, но проблема в том, что мои голец переменные не «печать» на мой вывод. Он выводит их размер в байтах, но независимо от того, что я делаю, я не могу заставить его работать. Кроме того, вторая переменная char (подписанная (S)) печатает то, что выглядит как треугольник, но больше ничего.

+1

Cast их в целое, чтобы отобразить значение, а не ASCII символов. –

ответ

6

Попробуйте это:

std::cout << (int)U << std::endl; 
std::cout << "The size in bytes of this variable is: " << sizeof(U) << std::endl 
    << std::endl; 

std::cout << (int)S << std::endl; 
std::cout << "The size in bytes of this variable is: " <<sizeof(S) << std::endl << std::endl; 

Объяснение так просто: когда тип char, cout пытается произвести символический вывод, который whitespace для 255 или довольно подобный треугольник для 127. Когда в type is int, cout просто печатает значение переменной. Например, в C:

printf("%d", 127) // prints 127 
printf("%c", 127) // prints triangle, because %c formatter means symbolic output 
+0

Этот ответ не может быть улучшен дальше, чем он есть. Отлично сработано! – Jake2k13

+2

Отличная ревизия, было бы лучше сделать это так: static_cast (VAR) или (int)? – Jake2k13

+1

В вашем случае они [одинаковы] (http://stackoverflow.com/questions/103512/in-c-why-use-static-castintx-instead-of-intx). – Netherwire

0

Они печатаются, но вы не можете их увидеть. Вы можете открыть файл «limits.h»:

#define CHAR_BIT  8   /* number of bits in a char */ 
#define SCHAR_MIN (-128)  /* minimum signed char value */ 
#define SCHAR_MAX  127  /* maximum signed char value */ 
#define UCHAR_MAX  0xff  /* maximum unsigned char value */ 

то искать UCHAR_MAX и CHAR_MAX в таблице ASCII,

Смежные вопросы