После компиляции когда ввожу первую переменную (т.е. name), вторая пропускается... Получается вот что:
Name: bill
Comm: bill
Короче, cin.get(comm, sizeof(comm), '\n'); вообще не выполняется...
Компиляторы: borland command line tools 5.5 и c++ builder 5.0
В обоих такая вот лажа...
Из-за чего это могет быть?
Во-первых: советую проверять, что возвращает get() или проверять состояние потока после get(), что то же самое. Профессиональная болезнь программиста - гипертрофированный оптимизм.
Во-вторых - цитата из Страуструпа:
"Никогда не обращайтесь к get два раза подряд, не удалив завершающий символ."
get() не удаляет из входного буфера \n, поэтому второй get немедленно возвращает управление, естественно, с ошибкой (потому что не прочитал ни одного символа), но ты на нее не обращаешь внимания. Содержимое целевой строки после этого может быть чем угодно. В твоем случае лучше использовать getline.
И еще, не совсем по теме: а не имеет ли смысла использовать для ввода строк тип string из стандартной библиотеки? Понятно, что в твоем случае ничего страшного с char[] произойти не может, но string все-таки безопаснее, да и работать с ним удобнее...
Спасибо вери мач!
Сегодня я в институт не пойду, пойду к врачу лечить этот гипертрофированный оптимизм ;)
Слово-то какое :)
А вот по поводу string... покажи плиз какой-нибудь мини-примерчик...
Буду очень благодарен!
> Сегодня я в институт не пойду, пойду к врачу лечить этот > гипертрофированный оптимизм ;) По-моему, он почти не лечится :)
> А вот по поводу string... покажи плиз какой-нибудь > мини-примерчик... > Буду очень благодарен! Хм... Не знаю, там и писать-то нечего...
Ну мысль вот в чем. Если хочется схавать строку произвольной длины с некоторым концевым символом, то можно написать
string s;
ifstream f;
// ifstream'у обычно параметром имя файла дают с флагами,
// ну разберешься, в общем.
f.getline(s);
или
f.getline(s, end_char); // если концевой символ - не \n
Вот, собственно, и все. Сколько тебе в строку символов прочитать удастся, столько и прочитает, память под строку выделится без твоего участия. Минус - по сравнению с твоим вариантом этот работает, конечно, медленнее. Но там разница будет настолько несерьезная, что по-моему, проще пользоваться этим.