Andropov24: в UTА-8 символы начинающиеся с единицы в старшем бите (т.е. с кодом больше 127) многобайтные. А ваш теримнал, скорее всего, ждет от вас utf-8.
Вариант 1. Погуглить на тему конвертирования из одной кодировки в другую.
Вариант 2. Изменить настройки терминала.
Вариант 3. Не использовать ASCII, если в этом нет острой необходимости.
maaGames: Вцелом согласен, однако замечу, что иногда это вынужденная мера (но в этом случае смешивание идет осознанно), т.к. плюсовый ввод/вывод не очень годится для работы "COM-портами", в частности для настройки через ioctl, по-крайней мере я не нашел работающих примеров).
bergentroll: в первом цикле будут наблюдаться кракозябры, если вы (например) после каждого байта выведите любой другой символ (например перевод строки).
bergentroll: Предвосхищая ваш вопрос, почему в некоторых случаях это работает - ASCII (первые 127 символов, т.е. все английские буквы + основные знаки препинания и математических операций) полностью совпадают с utf-8 (они однобайтные)
Ivan Sokolov: Это не граничный случай, а банальная невнимательность или неграмотность. (ну или нежелание думать, тоже может быть) Граничные случаи это несколько иное.
Никита Траторов: Лично встречал некоторые сайты, которые по запросу на восстановления пароля.. присылали мне старый пароль, что вызывает некоторые сомнения на счет хеширования.
Nexeon: 1. Время паузы не определяется самой программой. Т.е. имеем поведение не зависящее от воли разработчика программы. 2. На линуксе (если вдруг автору придется иметь с ним дело, ибо все бывает) я сталкивался со странным поведением, что пауза ставит на паузу любой вывод во всех виртуальных терминалах - т.е. например (случай из практики) у меня параллельно в двух терминала программы что-то спамят в stdout, одна из низ вызывает system("pause"), а у второй вывод тоже ставится на паузу.