Я новичок в C, и я работал над этой домашней проблемой около 2 часов безрезультатно. Я пытаюсь создать программу, которая принимает буквенный номер телефона (например, CALLATT или 1-800-COL-LECT) и превращает его в цифровую форму (2255288 или 1-800-265-5328). Независимо от того, что я поставил для ввода, я всегда получаю -4197680 для моего вывода.Почему моя программа C выдает тот же результат независимо от того, что я положил для ввода?
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;
}
и не должно быть 'scanf ("% s ", & n)'? –
Я вижу UB здесь. 'int a, len, a [len];' --- 'len' не инициализируется в точке, где он используется для' a' (и 'n' в следующей строке). Также обратите внимание, что это использует довольно слабо поддерживаемую функцию C99 (хотя по крайней мере GCC и CLang поддерживают ее просто отлично). –
@AlvaroMontoro: Нет. 'Scanf' берет указатель на начало буфера, а не указатель на указатель (нет необходимости, поскольку он не выделяет никакой памяти сам по себе). –