Вопрос № 156905: решить с помощью двумерного массива: В массиве хранится информация о числе жителей, проживающих в каждом доме улицы. Всего 100 домов. Дома с нечетными номерами расположены на одной стороне улицы, а с нечетными - на другой. Написать программу, возвращ...
Вопрос № 156927: Составить программу, которая в списке из каждой группы подряд идущих одинаковых элементов оставляла только один...Вопрос
№ 156928: По данным сведениям о студентах группы определить сколько студентов могут заниматься в баскетбольной секции, если рост баскетболиста должен быть больше 170 см. вывести список их фамилий...Вопрос № 156954: Хотелось бы уточнить один момент у профессионалов. Это касается потокового ввода, а именно cin.getline() Каким образом лучше реализовать ввод этой функцией с учетом того, что при вводе строк, длина кот
орых превышает размер буфера, ввод дальней...
Вопрос № 156.905
решить с помощью двумерного массива: В массиве хранится информация о числе жителей, проживающих в каждом доме улицы. Всего 100 домов. Дома с нечетными номерами расположены на одной стороне улицы, а с нечетными - на другой. Написать программу, возвращающую значение ИСТИНА, если на четной стороне улицы проживает больше жителей, иначе - ЛОЖЬ.
Отвечает: Micren
Здравствуйте, Федосеев Павел Юрьевич! Поскольку Вы не уточнили на мою просьбу в письме о какой реализации списка идет речь и никто не ответил, то вот программа реализующая связный двунаправленный список. Я тестировал ее в Microsoft Visual Studio 2008. На целых числах. Если Вам необходим другой тип(любой). То в строке typedef int MyType; Замените int на требуемый Вам тип. Если это будет class, то должны быть перегружены операторы потокового ввода вывода <<,>> и сравнения == и реализован конструктор
копирования и присваивания. Вроде все.
Приложение:
Ответ отправил: Micren (статус: 9-й класс)
Ответ отправлен: 08.01.2009, 05:28
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 240542 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 156.928
По данным сведениям о студентах группы определить сколько студентов могут заниматься в баскетбольной секции, если рост баскетболиста должен быть больше 170 см. вывести список их фамилий
Отвечает: Micren
Здравствуйте, Федосеев Павел Юрьевич! Программа тестировалась MS Visual Studio 2008. Вроде прокомментировал на мой взгляд нормально. Если что пишите.
Приложение:
Ответ отправил: Micren (статус: 9-й класс)
Ответ отправлен: 07.01.2009, 22:56
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 240528 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 156.954
Хотелось бы уточнить один момент у профессионалов. Это касается потокового ввода, а именно cin.getline()
Каким образом лучше реализовать ввод этой функцией с учетом того, что при вводе строк, длина которых превышает размер буфера, ввод дальнейших данных представляет некоторую проблему.
Например.
Код:
cin>>something; cin.getline(buffer,buflength); // Если строка больше буфера, то устанавливается флаг fail cin.clear(); // Сбрасываем его cin>>a>>b>>c; // Здесь возникает проблема в виде того, что из потока данные не извлекаются (типа флаг не сброшен)
толком в нете по этому поводу одни жалобы Для себя я решил ее типа так.
Но это как то неуклюже. Хотелось бы узнать, есть ли толковый способ
побороть потоковый ввод в C++? Советы типа выделять буфер с запасом, как это встречается в некоторых "решениях", не годятся.
Отправлен: 08.01.2009, 02:03
Вопрос задал: Micren (статус: 9-й класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Хватов Сергей
Здравствуйте, Micren!
Самый толковый способ - использовать функцию (не метод!) getline "прилагаемую" к классу std::string:
The function istream &getline(istream &instream, string &target, char delimiter)
may be used to read a line of text (up to the first delimiter or the end of the stream) from instream (note that getline() is not a member function of the class string). The delimiter's default value is '
'. It is removed from instream, but it is not stored in target. If the delimiter is not found, istr.eof() returns true.
и в целом - использовать для работы с символьными строками не char[], а специально придуманный для этого класс.
Приложение:
Ответ отправил: Хватов Сергей (статус: Практикант)
Ответ отправлен: 08.01.2009, 10:51
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 240554 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 4 Комментарий оценки: Ответ хороший и полезный. Несомненно будет принят к сведению, но вопрос был именно по cin.getline() Хотелось бы именно решение для этого метода поскольку не люблю недопониманий в работе программ.
Отвечает: Whenpigsfly
Здравствуйте, Micren!
Ввод подобных данных действительно лучше реализовывать с помощью функции std::getline(), но попробую пролить свет на то, что же все-таки происходит с методом cin.getline(). После вызова cin.clear(), флаг ios::failbit действительно сбрасывается (совсем не "типа" =), а в результате вызова cin>>a>>b>>c; данные из потока считываются как и обычно. Проблема только в том, что в потоке до сих пор остаются данные, которые не влезли в заданный размер буфера
(buflength) (см. пример 1 в приложении).
Что же касается того, как все-таки избавиться от оставшихся в потоке символов, то предложенный вами метод в принципе работоспособен, но обычно делают так, как в примере 2 (приложение).
Ну вроде все, больше не осталось белых пятен.
Приложение:
Ответ отправил: Whenpigsfly (статус: 2-й класс)
Ответ отправлен: 08.01.2009, 18:18
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 240591 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Спасибо за ответ. Я в принципе тоже так пытался делать, только не знал как правильно определить максимальный размер потока параметр _Count.
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.