Есть несколько способов прочитать по одному символу за раз, пока вы не прочитаете их все, и ни один из них не обязательно является лучшим.
Лично я бы использовал следующий код:
char c;
while (cin.get(c)) {
// Process c here.
}
Если вам нужно только прочитать m
символов, рассмотрите возможность использования цикла for
:
char c;
for (unsigned int i = 0; i < m && cin.get(c); ++i) {
// Process c here.
}
Это запускает цикл, если выполняются два условия: (1) прочитано менее m
символов и (2) есть еще символы для чтения.
Однако оба решения имеют недостаток: они относительно неэффективны. Более эффективно читать символы m
за один раз.
Итак, сначала выделите достаточно большой буфер для хранения m
символов, а затем попытайтесь прочитать их:
std::vector<char> buffer(m);
cin.read(&m[0], m);
unsigned total_read = cin.gcount();
Обратите внимание на последнюю строку - здесь будет указано, действительно ли прочитано m
символов.