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

Существует три способа решения этой проблемы:

  • Вызвать next() на сканере и извлечь первый символ строки (например, charAt(0)). Если вы хотите прочитать остальную часть строки в качестве символов, итерацию по оставшимся символам в строке. Другие ответы имеют этот код.
  • Используйте setDelimiter(""), чтобы установить разделитель в пустую строку. Это заставит next() tokenize в строки, которые имеют ровно один символ. Итак, вы можете повторно вызывать next().charAt(0) для повторения символов. Затем вы можете установить разделитель в исходное значение и возобновить сканирование обычным способом!
  • Использовать API-интерфейс Reader вместо API-интерфейса сканера. Метод Reader.read() обеспечивает чтение одного символа из входного потока. Например:
    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) {  // check for EOF
        // we have a character ...
    }
    

Когда вы читаете с консоли через System.in, вход обычно буферизуется операционной системой и только «освобождается» от приложения, когда пользователь вводит ENTER. Поэтому, если вы намереваетесь, чтобы ваше приложение реагировало на отдельные штрихи клавиатуры, это не сработает. Вам нужно будет сделать некоторые собственные материалы для кода, специфичные для ОС, чтобы отключить или работать с буферизацией строк для консоли на уровне ОС.

Ссылка:

0
задан Shuster 3 March 2019 в 12:33
поделиться

2 ответа

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

scanf("%c", &message[i]);
0
ответ дан OznOg 3 March 2019 в 12:33
поделиться

Проблема в том, что вы должны передать указатель на 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
ответ дан birdfreeyahoo 3 March 2019 в 12:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: