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