c - 为什么无论我输入什么内容,我的 C 程序都会打印出相同的输出?

标签 c

我是 C 语言新手,我已经花了大约 2 个小时来解决这个作业问题,但没有成功。我正在尝试创建一个程序,它采用字母电话号码(即 CALLATT 或 1-800-COL-LECT)并将其转换为数字形式(2255288 或 1-800-265-5328)。不过,无论我输入什么,我的输出总是得到 -4197680。

int main(void){

    int c=0, len, a[len];   
    char n[len];

    printf("Enter phone number: \n");
    scanf("%c", n);

    len = sizeof(n) / sizeof(n[0]);

    while (len > c){
        if (n[c] == 'A' || n[c] == 'B' || n[c] == 'C'){
            a[c] = 2;       
            c++;
        }
        else if (n[c] == 'D' || n[c] == 'E' || n[c] == 'F'){
            a[c] = 3;       
            c++;
        }
        else if (n[c] == 'G' || n[c] == 'H' || n[c] == 'I'){
            a[c] = 4;       
            c++;
        }
        else if (n[c] == 'J' || n[c] == 'L' || n[c] == 'L'){
            a[c] = 5;       
            c++;
        }
        else if (n[c] == 'M' || n[c] == 'N' || n[c] == 'O'){
            a[c] = 6;       
            c++;
        }
        else if (n[c] == 'P' || n[c] == 'Q' || n[c] == 'R' || n[c] == 'S'){
            a[c] = 7;       
            c++;
        }
        else if (n[c] == 'T' || n[c] == 'U' || n[c] == 'V'){
            a[c] = 8;       
            c++;
        }
        else if (n[c] == 'W' || n[c] == 'X' || n[c] == 'Y' || n[c] == 'Z'){
            a[c] = 9;       
            c++;
        }
        else {
            a[c] = n[c];
            c++;
        }           
    }

    printf("%d\n", a);

    return 0;   
}

最佳答案

编辑:已修改。有很多评论指出了问题,这是我的答案,适用于合理长度的电话号码。它会跳过任何非拨号字符,例如不属于电话号码的 '-'

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

int main(void){
    int k, d, e, len;
    char dial[20], entry[20] = {0};
    printf("Enter phone number: ");
    fgets(entry, 19, stdin);
    len = strlen(entry);
    d = 0;                                 // dial string index of output
    for (e=0; e<len; e++) {                // entry string index of input
        k = entry[e];
        switch (toupper(k)) {
            case 'A': case 'B': case 'C':           dial[d++] = '2'; break;
            case 'D': case 'E': case 'F':           dial[d++] = '3'; break;
            case 'G': case 'H': case 'I':           dial[d++] = '4'; break;
            case 'J': case 'K': case 'L':           dial[d++] = '5'; break;
            case 'M': case 'N': case 'O':           dial[d++] = '6'; break;
            case 'P': case 'Q': case 'R': case 'S': dial[d++] = '7'; break;
            case 'T': case 'U': case 'V':           dial[d++] = '8'; break;
            case 'W': case 'X': case 'Y': case 'Z': dial[d++] = '9'; break;
            default:
                if (isdigit(k) || k=='*' || k=='#') dial[d++] = k;
        }
    }
    dial[d] = 0;          // terminate string
    printf("Dial %s\n", dial);
    return 0;   
}

关于c - 为什么无论我输入什么内容,我的 C 程序都会打印出相同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487806/

相关文章:

c - 无法理解此 C 程序的结果

如果 3 个相同,则检查数组中的 5 个整数

c - 该声明将取代什么?

c - “int a[5]” 和 int (*a)[5]、int a[5][4] 和 int (*a)[5] 有什么区别? (仅限 C)

c - int 数组的大小未知

c - aeabi_fmul 从哪里链接?

c - 二分查找递归的问题

c - 了解读取系统调用

c - 包括类型定义,但不包括函数

c - 每次我的程序循环时如何生成一个新数字?