我一整天都在盯着这个,而且我在使用这段代码时遇到了困难。我需要这个程序将一串字母(如Call Cash)转换成7位数的电话号码。我得到两个结果之一。程序根本不输出任何数字,或者卡在无限循环中。非常感谢任何帮助。
// Program to convert letters to numbers in a phone number.
//Header file
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
//Declare variables
char input;
char letters;
int number;
int counter;
counter = 0;
//Program
cout << "Enter Y/y to convert a telephone number form letters to digits." << endl;
cout << "Enter any other letter to terminate the program." << endl;
cin >> input;
while (input == 'Y' || input == 'y')
{
cout << "Enter telephone number using letters: ";
cin >> letters;
cout << endl;
cout << "The corresponding phone number is: ";
while (counter <= 7);
{
cout << number;
if ((letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z'))
switch (letters)
{
case 'A':
case 'a':
case 'B':
case 'b':
case 'C':
case 'c':
cout << "2";
break;
case 'D':
case 'd':
case 'E':
case 'e':
case 'F':
case 'f':
cout << "3";
break;
case 'G':
case 'g':
case 'H':
case 'h':
case 'I':
case 'i':
cout << "4";
break;
case 'J':
case 'j':
case 'K':
case 'k':
case 'L':
case 'l':
cout << "5";
break;
case 'M':
case 'm':
case 'N':
case 'n':
case 'O':
case 'o':
cout << "6";
break;
case 'P':
case 'p':
case 'Q':
case 'q':
case 'R':
case 'r':
case 'S':
case 's':
cout << "7";
break;
case 'T':
case 't':
case 'U':
case 'u':
case 'V':
case 'v':
cout << "8";
break;
case 'W':
case 'w':
case 'X':
case 'x':
case 'Y':
case 'y':
case 'Z':
case 'z':
cout << "9";
break;
if (counter == 3)
cout << "-";
}
}
}
return 0;
}
编辑:这是我的新代码。我现在遇到的问题是它只返回第一个字母的值,并且它在单独的行上返回每个值。我非常感谢你的帮助:
//Declare variables
char input;
char letters;
int number;
int i;
//Program
cout << "Enter Y/y to convert a telephone number form letters to digits." << endl;
cout << "Enter any other letter to terminate the program." << endl;
cin >> input;
while (input == 'Y' || input == 'y')
{
cout << "Enter telephone number using letters: ";
cin >> letters;
cout << endl;
cout << "The corresponding phone number is: ";
for(int i = 0; i < 7; i++)
{
if ((letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z'))
switch (letters)
{
case 'A':
case 'a':
case 'B':
case 'b':
case 'C':
case 'c':
cout << "2";
break;
case 'D':
case 'd':
case 'E':
case 'e':
case 'F':
case 'f':
cout << "3";
break;
case 'G':
case 'g':
case 'H':
case 'h':
case 'I':
case 'i':
cout << "4";
break;
case 'J':
case 'j':
case 'K':
case 'k':
case 'L':
case 'l':
cout << "5";
break;
case 'M':
case 'm':
case 'N':
case 'n':
case 'O':
case 'o':
cout << "6";
break;
case 'P':
case 'p':
case 'Q':
case 'q':
case 'R':
case 'r':
case 'S':
case 's':
cout << "7";
break;
case 'T':
case 't':
case 'U':
case 'u':
case 'V':
case 'v':
cout << "8";
break;
case 'W':
case 'w':
case 'X':
case 'x':
case 'Y':
case 'y':
case 'Z':
case 'z':
cout << "9";
break;
cout << number;
}
if (i == 2)
cout << "-";
}
cout << "To process another telephone number, enter Y/y." << endl;
cout << "Enter any other letter to terminate the program." << endl;
cin >> input;
}
return 0;
}
答案 0 :(得分:2)
您的while (counter <= 7)
后面有分号。您错开了switch (letters)
的右括号,它应该之前 if (counter == 3)
。您在while
上有一个input
循环,但在程序运行时您永远不会更改它。
我得到了所有这些吗?
答案 1 :(得分:2)
你有... ...
(letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z')
喜欢
isalpha (letters)
答案 2 :(得分:1)
我注意到的第一件事是,在你的内部while循环中,你会在每个循环中输入变量'number',但你永远不会给它赋值。接下来,在内循环的开头有一个分号。您也永远不会增加'计数器'并将输入数字存储在单个字符中而不是字符串中。
对于观察到的行为,无限循环将来自永不递增的计数器,从而产生一个永不停止的循环。不打印任何东西都不会从没有为“数字”赋值。
我认为你打算做的是让开关条件为“数字”赋值而不是仅打印它。因此,cout应该在切换之后避免未初始化的值nastiness。
编辑:哦,请务必使用循环来迭代字符串。
以下是您需要做的一般概念:
string input;
cin >> input;
int length = strlen(input)
for(int i = 0; i < length; i++)
{
//what happens if this condition fails?
if ((letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z'))
{
switch (letters[i])
{
case 'A':
case 'a':
case 'B':
case 'b':
case 'C':
case 'c':
number = 2;
break;
<snip>
}
cout << number;
}
if(i == 2)
{
cout << '-';
}
}
答案 3 :(得分:0)
将'letters'声明为字符串而不是单个char 然后按字符逐个字符串并转换它们