首页 > 解决方案 > C程序采用字母电话号码并转换为数字形式

问题描述

我正在开发一个 C 代码,它将采用字母电话号码并转换为数字。我被困在输出上。输出将丢弃所需的数字。例如 1-800-GATOR,将返回 42867 但不返回 1-800-42867。这是我到目前为止所拥有的......

#include <ctype.h>  
#include <stdio.h>

int main (void)
{
char ch;
int num_vowels = 0;

printf("Please Enter a phone number: ");
while ((ch = getchar()) != '\n')
{
    switch (ch) {
        case 'A': case 'B': case 'C':
         putchar('2');
         break;
    }
    switch (ch) {
        case 'D': case 'E': case 'F':
         putchar ('3');
         break;
    }
    switch (ch) {
        case 'G': case 'H': case 'I':
         putchar ('4');
         break;
    }
    switch (ch) {
        case 'J': case 'K': case 'L':
         putchar ('5');
         break;
    }
    switch (ch) {
        case 'M': case 'N': case 'O':
         putchar ('6');
         break;
    }
    switch (ch) {
        case 'P': case 'Q': case 'R': case 'S':
         putchar ('7');
         break;   
    }
    switch (ch) {
        case 'T': case 'U': case 'V':
         putchar ('8');
         break; 
    }
    switch (ch) {
        case 'W': case 'X': case 'Y': case 'Z':
         putchar ('9');
         break; 
    }

   printf("%c", num_vowels);


}

return 0;
}

这是我缺少的东西printf("%c", num_vowels);吗?

任何帮助都可以得到!

标签: c

解决方案


您可能误解了该switch声明。虽然您的用法确实正确执行,但您只需要一个包含多种情况的语句:

switch (ch) {
    case 'A': case 'B': case 'C':
        putchar('2');
        break;
    case 'D': case 'E': case 'F':
        putchar('3');
        break;
    case 'G': case 'H': case 'I':
        putchar('4');
        break;
    /*   ...   */
}

请注意,当输入与任何情况都不匹配时,不会发生任何事情。这就是为什么只有大写字母被转换并发送到输出。一个简单的解决方案是添加一个default案例。这样,当输入字符不是任何大写字母时,它会直接发送到输出。将此添加到您的末尾switch

switch(ch) {
    case 'A': case 'B':
    /* ... */
    default:
        putchar(ch);
        break;
}

您也可以执行其他检查,例如仅打印某些字符。

至于printf("%c", num_vowels);它没有任何问题,只是num_vowels从未使用过。因此,您应该期望它'\0'在每个发送到输出的字符之后打印一个空字符 ( )。我不确定你的意图,但如果它是一个计数器,你应该增加变量并仅在读取输入后打印它,在while循环之外。

#include <stdio.h>
#include <ctype.h>

int
main(int argc, char **argv)
{
    char ch;
    int num_letters = 0;

    printf("Please Enter a phone number: ");
    while ((ch = getchar()) != '\n')
    {
        if (isupper(ch)) num_letters++;

        switch (ch) {
            case 'A': case 'B': case 'C':
                putchar('2');
                break;
            case 'D': case 'E': case 'F':
                putchar('3');
                break;
            case 'G': case 'H': case 'I':
                putchar('4');
                break;
            case 'J': case 'K': case 'L':
                putchar('5');
                break;
            case 'M': case 'N': case 'O':
                putchar('6');
                break;
            case 'P': case 'Q': case 'R': case 'S':
                putchar('7');
                break;   
            case 'T': case 'U': case 'V':
                putchar('8');
                break; 
            case 'W': case 'X': case 'Y': case 'Z':
                putchar('9');
                break; 
            default:
                putchar(ch);
                break;
        }

    }
    printf("\n-- %d alphabetic letters used.\n", num_letters);

    return 0;
}

推荐阅读