求助,初学者有道 C 语言的问题不会


自己看书学C语言,遇到一道练习题不知道怎么解决,也没有答案,求助。。
题目如下:

编写程序可以把字母格式的电话号码翻译成数值格式,
譬如:
Enter phone number: CALLATT
2255288
或者:
Enter phone number: 1-800-COL-LECT
1-800-265-5328
对应关系:2=ABC,3=DEF,4=GHI,5=JKL,6=MNO,7=PQRS,8=TUV,9=WXYZ

请教下这个问题的解决思路是什么!

一开始的思路是利用scanf函数只提取所需的数据类型然后保留其他的数据的特点,希望用两条scanf函数分别提取输入内容的字符和数字信息,然后转换字符为对应数字,然后统一printf
但是不知道为什么:
scanf("%c", &alpha); scanf("%d", &rest);
输入值为1-800-COL-LECT
提取出来后,alpha的值为1,rest值为-800
也请教下这个问题是咋回事!

谢谢!

c 求助

严重过期金克拉 10 years, 3 months ago

@spacelan 给出了代码,我来回答后面的问题好了
%c表示一个字符而不是字符串,所以当你输入1-800-COL-LECT时读取了第一个字符‘1’,之后你又用%d整数读取了-800,所以alpha = ‘1’, rest = -800

这是谁的视线 answered 10 years, 3 months ago


 char a[26] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
char s[15];
int i;
scanf("%s",s);
for(i=0;i<sizeof(s);i++)
{
    if(s[i]>='0' && s[i]<='9')
        printf("%c",s[i]);
    else if(s[i]>='A' && s[i]<='Z')
        printf("%d",a[s[i]-'A']);
}

一直很冲动 answered 10 years, 3 months ago

Your Answer