【发布时间】:2019-03-07 14:20:19
【问题描述】:
我正在做 KNKings 书籍“C 编程:一种现代方法”中的练习,其中涉及将用户输入的字母形式的电话号码转换为数字形式。当程序遇到非字母字符(例如数字或标点符号)时,应该保持它们不变。我可以假设用户只输入大写字母。
但是,至少可以说,我的程序似乎产生了垃圾。
#include <stdio.h>
#define MAX_SIZE 50
int main(void)
{
char alphabetic[MAX_SIZE], ch;
int num_elements = 0;
printf("Enter phone number: ");
int i;
for (i = 0; i < MAX_SIZE && ((ch = getchar()) != '\n'); i++){
alphabetic[i] = ch;
num_elements++;
}
for (i = 0; i <= num_elements; i++){
switch (alphabetic[i]){
case 'A': case 'B': case 'C': alphabetic[i] = '2'; break;
case 'D': case 'E': case 'F': alphabetic[i] = '3'; break;
case 'G': case 'H': case 'I': alphabetic[i] = '4'; break;
case 'J': case 'K': case 'L': alphabetic[i] = '5'; break;
case 'M': case 'N': case 'O': alphabetic[i] = '6'; break;
case 'P': case 'R': case 'S': alphabetic[i] = '7'; break;
case 'T': case 'U': case 'V': alphabetic[i] = '8'; break;
case 'W': case 'X': case 'Y': alphabetic[i] = '9'; break;
default: break;
}
}
printf("%s\n", alphabetic);
return 0;
}
我特别输入:COLLECT-800。 它输出如下内容:u░@■ ║k ╩
我做错了什么?
【问题讨论】:
-
ch应该是int。 -
@Lundin 你能解释一下原因吗?
-
@Shuster 与您的问题无关,但您缺少
Q和Z案例。 -
@Shuster 因为 getchar 返回一个 int 而 EOF 是一个 int。
-
@GovindParmar 好点,我不知道。但我不确定你对“最近”的定义是否准确,我的第一部手机(20 年前左右)已经有了 Q 和 Z ;-)