2013-09-25 65 views
1

下面一段代码:`C++中的unsigned char无效?

unsigned char agevalue; 
cout<<"what is your age?"<< endl; 
cin >> agevalue; 
cout<<"your age is:"<< agevalue <<endl;` 

削减值大于9,只留下第一个数字。 这可能是什么原因?

+0

你应该经常检查你的输入是否成功,例如'if(std :: cin >> agevalue){do_something_with(agevalue); }'第一个'std :: endl'肯定是不必要的,并且使用''\ n''来避免重复刷新。 –

回答

10

尽管在某些情况下,unsigned char被视为整数,但主要用于表示个别字符。因此,您的代码只是读取第一位数字。如果要读取数字,则需要使用非整数类型之一,例如int(如果需要整数,这应该是您的默认选择)。

+0

也就是说,如果输入'123','agevalue'将存储表示*字符*''1''('49')的ASCII值。然后打印出*字符*''1''。 – BoBTFish

+0

有趣,因为他们说char是另一种整数类型,但也可以带字母 – Bak1139

+1

在很多方面都是这样。但从标准库的部分角度来看,特别是那些与输入/输出有关的部分,它的处理方式是不同的。 – BoBTFish

5

因为你正在读一个字符而不是一个整数。

+0

但char也用于整数 – Bak1139

+0

但'char'的'''重载被写入来读取字符,即使您可以将任意整数存储在char中。 –

+2

请知道一个字符内部由一个整数表示,但其类型不是整数。 – Sadique

0

如果您正在寻找在数量上拉,你需要使用正确的数据类型:

unsigned short ageValue = 0; 
cout << "What is your age?" << endl; 
cin >> ageValue; 
cout << "Your age is " << agevalue << endl; 

如果你真的想年龄值存储在一个字节大小整数(而不是半字):

unsigned char ageValue = 0; 
unsigned short inputValue = 0; 
cout << "What is your age?" << endl; 
cin >> inputValue; 
ageValue = static_cast<unsigned char>(inputValue); 
cout << "Your age is " << static_cast<unsigned short>(agevalue) << endl; 
相关问题