Задать вопрос
@Andrei1penguin1

Почему при вводе текста добавляются лишние символы?

Доброго времени суток, есть кусок кода, читающий пользовательский ввод:
#include <stdio.h>

int main() {
    int a = getchar();
    
    while (a != '\n') {
        a = getchar();
    }
}

Но на выходите, допустим, вместо "Привет" получится "�П��р��и��в��е��т�"
Насколько мне известно, символ представляется номером в ASCII, но кириллицы там нет, следственно, и запись какая-то другая
Получается, что проблема возникает именно поэтому
Как с этим можно бороться?
  • Вопрос задан
  • 324 просмотра
Подписаться 3 Простой 8 комментариев
Решения вопроса 1
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Потому что на входе UTF-8, а не ASCII - два байта на букву, а не один.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Я сделал вот такой код (простите, для простоты «с крестами»).
#include <stdio.h>
#include <iostream>

int main() {
    int a = getchar();

    while (a != '\n') {
        std::cout << a << "-" << static_cast<char>(a) << std::endl;
        a = getchar();
    }
}

143-П
224-р
168-и
162-в
165-е
226-т

Так что не здесь полом. Но учтите, что работа была под виндой, а значит, в кодовой странице DOS-866. Подкиньте ОС, рабочую кодировку и чуть больше кода обвязки.

UPD1. Если символов 12 вместо 6 и ОС Android — перед нами кодировка UTF-8. И выводить в консоль по одному символу не очень кузяво, поскольку для русского текста получаются неполные кодовые позиции. Закройте буфер нулём и выведите целиком.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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