我想要一个变量,它将从char更改为int,反之亦然,具体取决于用户条目

时间:2010-08-24 22:09:12

标签: c++ random

我必须定义一个我在程序中使用的变量,但我希望变量从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。我不知道是否有什么要做的,但如果有我想知道的话。

谢谢

4 个答案:

答案 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,而不是测试它是否可以指定为整数,如果可以,则比您的程序将开始使用它。并且为了决定使用哪个变量,您还可以声明另一个布尔值来保存该数据。我相信必须有更好的方法,但我想这也有效。