提问人: 提问时间:8/2/2022 最后编辑:digito_evo 更新时间:8/6/2022 访问量:408
在 C++ 中输入类型为 char 的变量的数字
Input number to variable with type char in C++
问:
在 C++ 中,如何向变量输入数字?在 C 中,我可以使用格式说明符接受输入:unsigned char
%hhu
unsigned char var_name;
scanf("%hhu", &var_name);
//lets say I inputted 27
printf("%hhu", var_name);
//the output is 27
如何在 C++ 中做到这一点?下面的代码是我尝试在 C++ 中执行此操作的,但它做了错误的事情。如何在 C++ 中编写等效代码?
unsigned char var_name;
std::cin >> var_name;
//Input 27 again
std::cout << var_name;
//The output is just 2, how can I make the '7' appear?
答:
由于 cin,打印变量时只得到 2。
C++ 中无符号字符的最大大小通常为 8 位,这对于任何实际字符和最多 255 的任何数字都很好。但是,这个数字取决于编译器和系统。可以存储的最大值位于标头中,如UCHAR_MAX所示。
您在这里的问题是您使用的是 cin,如果它将输入存储为字符,它只会读取输入的第一个“字符”。有几种方法可以解决这个问题,包括将输入作为整数,然后转换为字符,或者让您的程序使用整数。
希望这对:)有所帮助
评论
27
2
发生这种情况是因为在读取 from 时,会读取一个字符。这就是发生的事情,这就是工作方式。这也很有道理,因为想要阅读一个字符是很常见的。unsigned char
std::istream
std::istream
简单的解决方案是使用临时变量:
unsigned char var_name;
unsigned int tmp;
std::cin >> tmp; // input 27
// optionally add checking that tmp is small enough
var_name = tmp; // truncation of unsigned ints is well defined
std::cout << var_name; // should print 27
评论
template <typename T> class as_number { ....
std::cin >> as_number{tmp};
当是类型时,则行var_name
unsigned char
std::cin >> var_name;
类似于
std::scanf("%c", &var_name);
即 C++ 将假设您要读取单个字符并将字符代码写入 .var_name
如果要读取一个数字并将该数字写入 ,则不能使用数据类型,或者在使用 时,即使数据类型在技术上能够表示所需的值范围。相反,您首先必须使用具有较大数据类型的变量(例如 )来读取数字。之后,您可以将其分配给另一个类型的变量:var_name
char
unsigned char
operator >>
unsigned short
unsigned char
unsigned char var_name;
unsigned short temp;
std::cin >> temp;
if ( std::cin )
{
var_name = static_cast<unsigned char>( temp );
std::cout << var_name << '\n';
}
else
{
//TODO: handle error
}
这不是必需的,但某些编译器可能会由于截断而发出警告,这可能会被强制转换抑制。此外,使用强制转换使代码更具可读性,因为很明显该值被截断了。static_cast
但是,我通常不建议您用于用户输入,因为它会做一些奇怪的事情,例如operator >>
- 并不总是一次读取一行输入,并且
- 接受垃圾,例如作为数字的有效输入,尽管在这种情况下可能应该拒绝输入。
"6sdfj23jlj"
6
如果你想通过正确的输入验证从用户那里读取一个数字,我建议你看看我的这个答案中的函数。get_int_from_user
评论
std::cin >> var_name;
char
std::istream
unsigned char