我必须定义一个我在程序中使用的变量,但我希望变量从int更改为char。
例如
#include <iostream>
#include <cstdlib>
int main()
{
int l=rand();
char x;
std::cout<<"this program makes a random char or number enter n for a number or c if you want a letter\n";
std::cin>>l>>"\n";
if (x="c")
{
char l=rand();
std::cout<<"here is your letter :"<<l<<"\n";
}
else if (x="n")
{
int l=rand();
std::cout<<"here is your number :"<<l<<"\n";
}
}
所以我已经知道还有其他问题,这只是一个例子,我写得很快,以显示我的意思。我想这样做,以便根据用户输入的内容将l从char更改为int。我不知道是否有什么要做的,但如果有我想知道的话。
谢谢
答案 0 :(得分:2)
您可以使用联合
union char_and_int {
char char_l;
int int_l;
}l;
//...
l.int_l=rand();
if (x == 'c')
{
std::cout<<"here is your letter :"<<l.char_l<<"\n";
}
else if (x == 'n')
{
std::cout<<"here is your number :"<<l.int_l<<"\n";
}
另外,请注意这会导致无法打印的字符
答案 1 :(得分:1)
此类事物的通用名称是 union 。
您可以使用union
关键字来定义C样式的并集:可以将其视为具有多种类型之一的变量。但是,您需要完成所有工作以跟踪它的类型。
union {
char c;
int i;
} l;
bool l_is_int;
if ( x == 'c' ) {
l_is_int = false;
cin >> l.i;
} else if ( x == 'n' ) {
l_is_int = true;
cin >> l.c;
}
有一个班级boost::variant
可以更优雅,更安全地完成这项工作:
boost::variant< char, int > l;
if ( x == 'c' ) {
char c;
cin >> c;
l = c; // set content type of l to char
cout << "your char is " << boost::get< char >( l ) << endl;
} else {
int i;
cin >> i;
l = i; // set content type of l to int
cout << "your int is " << boost::get< int >( l ) << endl;
}
cout << "your int or char is " << l << endl;
对于您的直接问题,使用任何类型的联合都是过度的,因为int
可以保留任何char
值:
int l;
bool l_is_int;
if ( x == 'c' ) {
char c;
cin >> c;
l = c;
l_is_int = false;
} else if ( x == 'n' ) {
cin >> l;
l_is_int = true;
}
答案 2 :(得分:0)
因为C ++是一种静态类型语言,所以变量实际上不能从一种类型转换为另一种类型。解决方案是创建一个包含int和char变量的结构或类,并相应地分配它们。
动态类型的语言,如Python或Ruby,可以做到这一点。
答案 3 :(得分:0)
我不是c ++的专家,但我猜你可以声明2个变量,一个char和一个int。首先,您可以将用户输入分配给char,而不是测试它是否可以指定为整数,如果可以,则比您的程序将开始使用它。并且为了决定使用哪个变量,您还可以声明另一个布尔值来保存该数据。我相信必须有更好的方法,但我想这也有效。