如何在输入后将int转换为char,将char转换为int

时间:2019-01-28 06:49:06

标签: c++

我刚刚学习了cpp,到目前为止还不很了解。

我最近学习了“如果”语法,只是为自己做作业。 您得到用户的输入。它可以是字符或数字。 当他键入数字时,它会显示他键入的内容,并且需要根据ASCII表将其更改为字符。 反之亦然。

我已经搜索了一段时间,但是似乎人们正在使用循环,但是我还没有学到。因此,我不会在本作业中使用它。

这是我尝试过的代码,但不知道出了什么问题。

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter a Number between 65 to 122 or an Alphabet character : ";
    char in_char;

    cin >> in_char;

    if ((in_char) >= 65 && (in_char) <= 122) // checking for alphabet
        cout << in_char << " " << static_cast<int>(in_char) << endl;

    else // if input is not an alphabet, it's a number and it should be turnd to a character
        cout << in_char << " " << static_cast<char>(in_char) << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:0)

好的,我想我理解您想要做的没有循环的事情。尽管您可能需要取消对整数输入的限制,以确保输入的一位数字转换为ASCII '0'->'9'。如果我回答了您的问题,则希望能够输入数字或字符,并验证其是否在[A-Za-z][0-9]的范围内,然后输出相应的ASCII字符和ASCII字符值(反之亦然)。

例如,如果用户输入以下内容,则您想要类似的输出:

    input   output
    -----   -------------------------------------------
       5    '5' 5
     121    'y' 121
       y    'y' 121
     200    error: integer out of range
       =    error: character no within requested range
       P    'P' 80

为了完成此任务,您基本上需要尝试读取整数,验证是否发生了不可恢复的cin.eof() || cin.bad()并错误退出。否则,将发生cin.fail()并且输入不是整数,并保留在stdin中,您可以在其中cin.clear() 失败位,然后尝试读取字符。

读取字符后,您具有相同的基本验证,只是没有理由清除失败位,因为尝试读取整数然后字符在该点失败了。

良好地阅读intchar时,您只需执行所需的验证即可确保intchar在范围内,然后格式化您的输出所需。

带有必要验证的简短示例如下:

#include <iostream>

using namespace std;

int main (void)
{
    cout << "Enter a digit or upper or lower case character : ";
    int in_int;
    char in_char;

    if (!(cin >> in_int) ) {    /* attempt read of int */
        /* if eof() or bad() return error */
        if (cin.eof() || cin.bad()) {
            cerr << "(user canceled or unreconverable error)\n";
            return 1;
        }
        cin.clear();            /* clear failbit */
    }
    else {  /* good integer read */
        if (in_int >= 0 && in_int <= 9) {        // checking ASCII [0-9]
            cout << "'" << (char)(in_int + '0') << "' " << in_int << endl;
        }
        else if (in_int >= 'A' && in_int <= 'z') // checking ASCII [A-Za-z]
            cout << "'" << (char)in_int << "' " << in_int << endl;
        else {
            cerr << "error: integer input out of range.\n";
            return 1;   /* return failure */
        }
        return 0;       /* return success */
    }

    if (!(cin >> in_char) ) {    /* attempt read of char */
        /* if eof() or bad() return error */
        if (cin.eof() || cin.bad()) {
            cerr << "(user canceled or unreconverable error)\n";
            return 1;
        }
        else if (cin.fail())    /* if failbit */
            cerr << "error: invalid input.\n";

        return 1;
    }
    else {  /* good character input */
        if (in_char >= 'A' && in_char <= 'z') // checking ASCII [A-Za-z]
            cout << "'" << in_char << "' " 
                    << static_cast<int>(in_char) << endl;
        else
            cerr << "error: character not within requested range.\n";
        return 1;
    }
}

使用/输出示例

$ ./bin/cinonechar
Enter a digit or upper or lower case character : 5
'5' 5

$ ./bin/cinonechar
Enter a digit or upper or lower case character : 121
'y' 121

$ ./bin/cinonechar
Enter a digit or upper or lower case character : y
'y' 121

$ ./bin/cinonechar
Enter a digit or upper or lower case character : 200
error: integer input out of range.

$ ./bin/cinonechar
Enter a digit or upper or lower case character : =
error: character not within requested range.

$ ./bin/cinonechar
Enter a digit or upper or lower case character : P
'P' 80

仔细检查一下,如果还有其他问题,请告诉我。您可以调整int值范围的检验,以更正我对问题范围的误解。