C++ 在C+中将字母转换为电话号码中的数字+;

C++ 在C+中将字母转换为电话号码中的数字+;,c++,while-loop,C++,While Loop,我整天都在盯着这个,我对这个代码感到很难理解。我需要这个程序将一串字母(如Call Cash)转换成7位数的电话号码。我得到两种结果中的任何一种。要么程序根本不输出任何数字,要么陷入无限循环。如蒙协助,将不胜感激 // Program to convert letters to numbers in a phone number. //Header file #include <iostream> #include <iomanip> using namespace

我整天都在盯着这个,我对这个代码感到很难理解。我需要这个程序将一串字母(如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;
}
//将电话号码中的字母转换为数字的程序。
//头文件
#包括
#包括
使用名称空间std;
int main()
{
//声明变量
字符输入;
字符;
整数;
整数计数器;
计数器=0;
//节目

你的
while后面可以有一个分号吗(counter你的
while后面可以有一个分号(counter我注意到的第一件事是,在内部while循环中,你可以在每个循环中输入变量'number',但是你从来没有给它赋值。接下来,你在内部循环的开头有一个分号。你也从来没有递增'counter',并将输入的数字存储在单个字符而不是字符串中

至于观察到的行为,无限循环将来自从不递增的计数器,导致一个从不停止的循环。打印任何内容都不会来自从不为“number”赋值

我想你的意思是让开关条件为“number”赋值,而不是仅仅打印它。因此cout应该在开关之后,以避免未初始化的值

编辑:哦,一定要使用循环来遍历字符串

以下是您需要做的工作的总体思路:

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 << '-';
    }
}
字符串输入;
cin>>输入;
int length=strlen(输入)
for(int i=0;i如果((letters>='A'&&letters='A'&&letters我注意到的第一件事是,在内部while循环中,你可以在每个循环中输入变量'number',但你从来没有给它赋值。接下来,你在内部循环的开头有一个分号。你也从来没有递增'counter',并将输入的数字存储在一个字符中,而不是str我很生气

至于观察到的行为,无限循环将来自从不递增的计数器,导致一个从不停止的循环。打印任何内容都不会来自从不为“number”赋值

我想你的意思是让开关条件为“number”赋值,而不是仅仅打印它。因此cout应该在开关之后,以避免未初始化的值

编辑:哦,一定要使用循环来遍历字符串

以下是您需要做的工作的总体思路:

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 << '-';
    }
}
字符串输入;
cin>>输入;
int length=strlen(输入)
for(int i=0;iif((字母>='A'&&letters='A'&&letters将'letters'声明为字符串而不是单个字符

然后逐个字符地检查字符串并将其转换为字符串,将“字母”声明为字符串而不是单个字符 然后逐个字符地检查字符串,并将它们转换为您所拥有的

(letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z')
你在哪里

(letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z')

我已经用你的建议更新了代码,现在遇到了一个稍微不同的问题。你比教授的帮助多得难以置信。我建议你使用toupper(或tolower)转换“字母”…这样,您就可以将切换案例减少一半…使其更具可读性。我之前的评论是@hbomb1013。我已经用您的建议更新了代码,现在遇到了一个稍微不同的问题。您比教授的帮助大得多。我建议您使用toupper(或tolower)转换“字母”…这样,您可以将开关案例减少一半…使其更具可读性。我之前的评论是针对@HBomb1013的