【问题标题】:how to convert int to char, char to int after get an input获取输入后如何将int转换为char,char转换为int
【发布时间】:2019-01-28 06:49:06
【问题描述】:

我刚刚开始学习cpp,目前还不太了解。

我最近学习了“if”语法,刚刚为自己做了一个家庭作业。 你从用户那里得到一个输入。它可以是字符或数字。 当他键入一个数字时,它会显示他键入的内容,需要根据 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;
}

【问题讨论】:

  • 如果输入不是字母,你期望什么输出?
  • 为什么人们写65而不是'A'
  • 当用户输入 65 时,输出 65 A。如果是 'A',输出 A 65。
  • static_cast&lt;char&gt;(in_char)in_char 已经是char,不再需要static_cast
  • 您希望如何将 2 个字符(例如 "65"'6''5')读成一个 char

标签: c++


【解决方案1】:

好的,我想我明白你想要在没有循环的情况下做什么。尽管您可能需要删除我对整数输入的限制,以确保输入单个数字以转换为 ASCII '0'-&gt;'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() failbit,然后尝试读取字符。

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

在充分阅读 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 值范围的测试,以纠正我对您的问题打算的范围的任何误解。

【讨论】:

  • 非常感谢您提供的漂亮代码。你得到了我想要的。但由于我知识渊博,我无法完全理解您的代码。从现在开始我必须深入研究它!
猜你喜欢
  • 2017-03-21
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2018-05-15
  • 2012-06-02
  • 2015-04-07
相关资源
最近更新 更多