C: Позвольте пользователю заполнить массив символов один символ за другим.Затем распечатай - PullRequest
0 голосов
/ 03 марта 2019

Я хочу написать программу, которая переводит введенное пользователем сообщение в B1FF-речь.Однако, программа, кажется, падает здесь:

#define MAX_LEN 80

char message[MAX_LEN];

printf("Enter a message: ");
for (int i = 0; i < MAX_LEN - 1; i++)
    scanf("%c", message[i]);

for (int i = 0; i < MAX_LEN - 1; i++)
    printf("%c", message[i]);

Где ошибка?Я не могу найти это.Я хочу понять, почему именно этот фрагмент кода дает сбой моей программе.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Вам нужно добавить амперсанд в операторе scanf.

scanf("%c", &message[i]);
0 голосов
/ 03 марта 2019

Проблема в том, что вы должны передать указатель на scanf .Обычно вы передаете массив (который является указателем) или символ-указатель (строка).То, что вы делаете, передает сам символ.У метода нет возможности записать что-либо в символ, потому что он копируется до вызова функции.

В таком случае происходит то, что метод интерпретирует неинициализированный символ как адрес и пытается записать в случайное место, котороескорее всего не получится.

Просто передайте адрес символа:

char message[MAX_LEN];
printf("Enter a message: ");
for (int i = 0; i < MAX_LEN - 1; i++)
    scanf("%c", &message[i]);

for (int i = 0; i < MAX_LEN - 1; i++)
    printf("%c", message[i]);
0 голосов
/ 03 марта 2019

вам нужно передать адрес в scanf:

scanf("%c", &message[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...