Я выполняю упражнение из книги 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 ╩
Что я сделал не так?