电话拨号程序将信件转换为卡套装而不是数字

时间:2017-03-27 02:45:06

标签: c++ switch-statement

我正在尝试创建一个程序,用户可以使用字母或数字输入电话号码,如果他们使用字母,则应将其转换为电话键盘上的相应号码。然而,当字母被转换而不是成为数字时,它们变成了卡片套装符号,如俱乐部,心形和黑桃。不知道为什么会这样。以下是转换应该发生的函数:

#include <iostream>
#include <cctype>
using namespace std;

int read_dials(char &digit1, char &digit2, char &digit3, char &digit4, char &digit5, char &digit6, char &digit7, char &digit8);
int todigit(char &digit);
void acknowledge_call(char digit1, char digit2, char digit3, char digit4, char digit5, char digit6, char digit7, char digit8);


int todigit(char &digit)
{
    int errorCode = 0;

    switch (digit)
    {
        case 1:
            break;
        case 2:
        case 'A':
        case 'B':
        case 'C':
        case 'a':
        case 'b':
        case 'c':
            digit = 2;
            break;
        case 3:
        case 'D':
        case 'E':
        case 'F':
        case 'd':
        case 'e':
        case 'f':
            digit = 3;
            break;
        case 4:
        case 'G':
        case 'H':
        case 'I':
        case 'g':
        case 'h':
        case 'i':
            digit = 4;
            break;
        case 5:
        case 'J':
        case 'K':
        case 'L':
        case 'j':
        case 'k':
        case 'l':
            digit = 5;
            break;
        case 6:
        case 'M':
        case 'N':
        case 'O':
        case 'm':
        case 'n':
        case 'o':
            digit = 6;
            break;
        case 7:
        case 'P':
        case 'Q':
        case 'R':
        case 'S':
        case 'p':
        case 'q':
        case 'r':
        case 's':
            digit = 7;
            break;
        case 8:
        case 'T':
        case 'U':
        case 'V':
        case 't':
        case 'u':
        case 'v':
            digit = 8;
            break;
        case 9:
        case 'W':
        case 'X':
        case 'Y':
        case 'Z':
        case 'w':
        case 'x':
        case 'y':
        case 'z':
            digit = 9;
            break;
    }
    // nice size switch statemwent

    return errorCode;
}

以下是打印电话号码的功能:

void acknowledge_call(char digit1, char digit2, char digit3, char digit4, char digit5, char digit6, char digit7, char digit8)
{
    cout << "Phone Number Dialed: " << digit1 << digit2 << digit3 << digit4 << digit5 << digit6 << digit7 << digit8;
}

2 个答案:

答案 0 :(得分:0)

而不是char数据类型只是将数字分配给整数变量或将48 +数字分配给char值,该值赋予ASCII值48 + 1 = 49,即char&#39; 1&#39;。

写作时

char ch = 'A';

您将ch的值设置为编译器用来表示字符的数字&#39; A&#39;。这通常是&#39; A&#39;的ASCII代码。这是65岁。

与任何数字类型一样,您可以使用普通数字对其进行初始化,从而得到相同的结果:

char ch = 65;

在您的情况下,您尝试为char变量分配值2,3,... 9值,这些值又显示相对ASCII值,该值可能在不同的输出流上以不同方式显示。

有关ASCII代码的更多信息,请参阅以下链接: http://en.cppreference.com/w/cpp/language/ascii

答案 1 :(得分:0)

我通过在我将其转换为的数字的两侧放置单个撇号来解决此问题。

例如:

digit = '2'; 

而不是

digit = 2;