c语言编程字母数字转换问题

编写一个函数,能够将字母电话号码转换成数字号码(假设输入的都是大写字母,输入的号码以#号结束)。字母数字对照表:2=ABC,3=DEF,4=GHI,5=JKL,6=MN0,7=PRS,8=TUV,9=WXY,如果原始号码出现了非字母,则这部分字符保持不变。
如输入:CALLATT,则输出2255288,输入:1-800-COL-LECT,则输出1-800-265-5328.

#include<stdio.h>
int main()
{char c;
int i,j;
printf("请输入字母电话号码:\n");
scanf("%c",&c);
printf("转化后为:\n");
for(i=0;i<=j;i++)
{if(c>='A'&&c<='C')
c='2';
if(c>='D'&&c<='F')
c='3';
if(c>='G'&&c<='I')
c='4';
if(c<='J'&&c<='L')
c='5';
if(c<='M'&&c<='O')
c='6';
if(c<='P'&&c<='S'&&c!='Q')
c='7';
if(c<='T'&&c<='V')
c='8';
if(c<='W'&&c<='Y')
c='9';
if(c='#')
break;
printf("%c",c);
}
printf("\n");
return 0;
}
请问我的程序哪里有问题,可否有解决的方案,谢谢!

#include <stdio.h>
#define N 50
char char2int(char ch){//转换函数
    char r;
    switch(ch){
        case 'A':
        case 'B':
        case 'C':r='2';break;//为了减少结果的判断,直接将数字转换成数字字符
        case 'D':
        case 'E':
        case 'F':r='3';break;
        case 'G':
        case 'H':
        case 'I':r='4';break;
        case 'J':
        case 'K':
        case 'L':r='5';break;
        case 'M':
        case 'N':
        case 'O':r='6';break;
        case 'P':
        case 'R':
        case 'S':r='7';break;
        case 'T':
        case 'U':
        case 'V':r='8';break;
        case 'W':
        case 'X':
        case 'Y':r='9';break;
        default:r=ch;//不用转换的,原样返回
    }
    return r;
}
int main()
{
char arr[N],b[N];
int i=0;

scanf("%s",&arr);//输入字串
while(arr[i]!='\0'&& arr[i]!='#'){//
    b[i]=char2int(arr[i]);//抄到结果字串
    ++i;
}
b[i]='\0';//结果字串补结束符,不然输出可能会有乱码
printf("%s\n",b);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-05-22
需要循环还有char型要定义字符串数组然后c[i]一个一个判断
重新定义一个字符串数组以便保存改变后的字符
第2个回答  2018-05-22
你在单独定义一个变量a,if(c>='A'&&c<='C') a=2;输出的时候用printf("%d",a);就好了,并且这个printf("%d",a);不要直接放在break;后面放在大括号外面。
相似回答