显示以char值存储在char数组中的char

时间:2016-04-13 16:23:43

标签: c

我遇到这个问题。 我有这个任务,我需要将字符显示为数值。 就像热线电话号码一样,例如拨打1-800-the-best。它会将所有字母显示为数字。

abc = 2, def = 3, ghi = 4, jkl = 5, mno = 6, pqrs = 7, tuv = 8, wxyz = 9.

我尝试使用atoi,但这会忽略数字字符,只会转换为字母字符。

我正在使用switch语句。没有编译错误,但不知何故我的输出结果很奇怪。这是我的代码

#include<stdio.h>
#include<string.h>
#define num 11

int main(void)
{
    char ch;
    char number[11];
    int i = 0;
    int j = 0;

    printf("please enter your phone number: \n");


    for(i = 0; i < num; i++)
    {
        scanf_s("%c", &ch);

        switch(ch)
        {
            case '0':
                number[i] = 0;
                break;

            case '1':
                number[i] = 1;
                break;

            case 'a': case 'b': case 'c':
                number[i] = 2;
                break;

            case 'd': case 'e': case 'f':
                number[i] = 3;
                break;

            case 'g': case 'h': case 'i':
                number[i] = 4;
                break;

            case 'j': case 'k': case 'l':
                number[i] = 5;
                break;

            case 'm': case 'n': case 'o':
                number[i] = 6;
                break;

            case 'p': case 'q': case 'r': case 's':
                number[i] = 7;
                break;

            case 't': case 'u': case 'v':
                number[i] = 8;
                break;

            case 'w': case 'x': case 'y': case 'z':
                number[i] = 9;
                break;
        }
    }

    printf("the phone number you enter is: ");

    for(j = 0; j < num; j++)
    {
        printf("%d", number[j]);
    }

    return 0;
}

当我输入每个字符为数字时,例如:1 2 3 4 5 6输出结果为

  

1-52-52-52-52-52-52-52-52-52-52-52。

如果我将每个字符串输入为字母表,例如:a b c d e f,则输出结果为

  

2-522-522-523-523-523。

我想知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

你忘了告诉它如何处理数字输入。您需要添加更多case语句,每个数字一个,如下所示:

 #include<stdio.h>
 #include<string.h>
 #define num 11

 int main(void)
{
    char ch;
    char number[11];
    int i = 0;
    int j = 0;

    printf("please enter your phone number: \n");


    for(i = 0; i < num; i++)
    {
        scanf("%c", &ch); // changed from scanf_s() to scanf()

        switch(ch)
       {
        case '0':
            number[i] = 0;
            break;

        case '1':
            number[i] = 1;
            break;

        case 'a': case 'b': case 'c':case '2':
            number[i] = 2;
            break;

        case 'd': case 'e': case 'f': case '3':
            number[i] = 3;
            break;

        case 'g': case 'h': case 'i': case '4':
            number[i] = 4;
            break;

        case 'j': case 'k': case 'l': case '5':
            number[i] = 5;
            break;

        case 'm': case 'n': case 'o': case '6':
            number[i] = 6;
            break;

        case 'p': case 'q': case 'r': case 's': case '7':
            number[i] = 7;
            break;

        case 't': case 'u': case 'v': case '8':
            number[i] = 8;
            break;

        case 'w': case 'x': case 'y': case 'z': case '9':
            number[i] = 9;
            break;
       }
    }

    printf("the phone number you enter is: ");

    for(j = 0; j < num; j++)
    {
        printf("%d", number[j]);
    }

    return 0;
}

一旦输入了额外的案例,这就编译并正确运行。但是,您还需要处理不属于这些的输入,最好的方法是添加

default: printf("Number/letter not entered\n"); break;

这将处理诸如.,#

之类的事情

编辑以显示完整的节目。