antoshka1303, раз
Код:
cout<<" ";
работает, а
Код:
cin>>c;
cout<<c;
"Съедает пробелы", значит дело не в cout

. Правда, тут необходимо еще понимать, что
" " является
const char *, а
c - просто char, и
cout::operator<<(const char *) и
cout::operator<<(char) имеют право по-разному работать, но дело тут не в этом.
Спасибо незванному гостю за указание на эту тонкость работы потоков в/в в си++. Теперь необходимо понять, в чем причина, и как ее устранить.
Вам вообще скоро свою работу сдавать? Время-то еще на то, чтобы потренероваться в отладке есть? Вы учитесь на программиста?
Добавлено спустя 29 минут 49 секунд:
Да, и еще, раз уж возникла такая тема:
- Символ '\0' есть признак конца строки в некотором соглашении, принятом во множестве стандартных функций языка си, да, и наверное, множества других языков. Существует еще масса способов расположить в памяти строку, причем так, чтобы можно было четко сказать, где ее конец. Например, в начале строки добавить информацию о ее длине в байтах. В си++ вы вольны создавать свои типы данных, в т.ч. и собственные строковые типы, и работать с ними, как вам заблагорассудится. При этом ваши строки необязательно будут оканчиваться на '\0'.
Символ '\0' закономерно может возникнуть в файле, а, следовательно, и в потоке ввода-вывода.
- Признак конца ввода строки уже является независимым от языка, и способа представления в нем строк, а является зависимым от программной платформы (ОС). Например, в DOS было принято заканчивать строки символами CR (0x0D)/LF(0x0A) (возврат каретки/перевод строки - аналогия с печатной машинкой). Символ '\n' в компиляторе под DOS производит именно эту комбинацию в стандартный вывод. Однако, в *nix используется только один из этих двух символов для обозначения конца строки (какой - я не помню). Соответственно, компилятор под *nix будет генерировать только один байт в конце каждой строки. Боюсь, что и cin не будет класть в вашу переменную данный байты, хотя они и входят в UTF-8 и latin-1. Она их будет интерпретировать по-своему. Поэтому, вам все же необходимо открыть поток в бинарном режиме, или не использовать cout::operator<<() и cout::operator>>(), а воспользоваться другими функциями потоков в stl. Хотя, если задание было на << и >>...
- Признак конца файла также является системно-зависимым. Обычно, ОС сама говорит вашему потоку, или ваш поток опрашивает ОС на предмет конца файла. И только вызвав cin.eof(), вы можете корректно в си++ проверить конец файла. Никаких спец. символов в конце файла, как правило, нет.