Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 543
от 05.10.2006, 00:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 391, Экспертов: 48
В номере:Вопросов: 5, Ответов: 10


Вопрос № 57090: Здравствуйте, уважаемые эксперты! Пишу на С под OS FreeBSD (или просто под UNIX). И два вопроса возникло: 1) как получить три переменных со значениями ЧЧ, ММ, СС - часы, минуты и секунды? Нашел функцию time() - она выводит секунды от 1970-ого...
Вопрос № 57094: Привет экспертам. Возник вопрос: каким образом работают чаты для локальных сетей. Недавно встретил очень интересный чат когда посылаешь сообщение оно приходит всем и рассылается всем начиная ну допустим с 127.0.0.1 по 127.0.0.255. Как мож...
Вопрос № 57109: в С++.создать абстрактный тип данных (структура), дом у которой есть название фирмы строителя, адрес, количество этажей и квартир. определить функции установки, изменения данных, сравнения домов. для задания текстовых по...
Вопрос № 57120: Приветствую уважаемые! Срочно нужна помощь! Сам язык с++ я более мение знаю, а вот програмирование под виндовс еще не очень освоил. Моя задача состоит в том, чтоб в программе сделать возможность просмотра картинок. Причем для отображения картинок...
Вопрос № 57164: Здравствуйте. У меня компилятор bcb6 и он ругается когда я пишу так: int n=3; int h[n]={1,2,3}; Не могли бы вы объяснить что не так, или так писать нельзя....

Вопрос № 57.090
Здравствуйте, уважаемые эксперты!
Пишу на С под OS FreeBSD (или просто под UNIX). И два вопроса возникло:
1) как получить три переменных со значениями ЧЧ, ММ, СС - часы, минуты и секунды? Нашел функцию time() - она выводит секунды от 1970-ого года...
2) этот вопрос поинтереснее! Программка в приложении. Суть - между двумя словами поставили паузу на три секунды. ОДнако, при запуске проходят три секунды, и только потом выводится целиковая фраза! А не отдельно по-словам. То-же самое, если заменяю sleep() на какой-нибудь долгий цикл - вывод происходит только в конце и сразу.
Я так понимаю, что sleep(), что цикл как-то блокируют ввод-вывод, а при выходе из них происходит мгновенное освобождение буфера (ведь printf() пишет в буфер изначально?).
Если я прав - подмигните. Нет - объясните, пожалуйста, причину. И как вообще избавиться от этого явления?

Приложение:

Отправлен: 29.09.2006, 00:19
Вопрос задал: Стомов Евгений (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: NextStep / www2
Здравствуйте, Стомов Евгений!

1. Для хранения времени и даты в таком формате существует структура tm, в которую входят следующие поля:

int tm_sec; /*секунды от начала минуты (0, 59);*/
int tm_min; /*минуты от начала часа (0, 59);*/
int tm_hour; /*часы от полуночи (0, 23);*/
int tm_mday; /*число месяца (1,31);*/
int tm_mon; /*месяцы с января(0,11);*/
int tm_year; /*годы с 1900;*/
int tm_wday; /*дни с воскресенья (0, 6);*/
int tm_yday; /*дни с 1 января (0, 365);*/
int tm_isdst; /*признак летнего времени.*/

Вот ссылка на краткое описание библиотеки time: http://ace.florin.ru/doc/susv2/xsh/time.h.html

2. Вывод буферируется, а при завершении программы буфер сбрасывается на консоль и файл вывода закрывается. Принудительно сбросить буфер на консоль можно с помощью функции fflush(stdout); Попробуйте вызвать эту функцию перед засыпанием.
---------
Нет правил без исключений, правило без исключения - это исключение из правил.
Ответ отправил: NextStep / www2 (статус: Студент)
Ответ отправлен: 29.09.2006, 08:29
Оценка за ответ: 4
Комментарий оценки:
1) Что-то я не понял, как пользоваться этой структурой, но уже и не важно - надо было просто перевести преобразовать число, полученное из функции time().
2) Да, fflush(stdout) работает - спасибо!

Отвечает: Sergey A. Wedensky
Здравствуйте, Стомов Евгений!

1) Если Вам нужно только время в пределах суток, попробуйте так:
void GetDayTime(int& hh, int& mm, int& ss)
{
time_t _t;
time(&_t);
_t %= 86400; // Секунд в сутках
hh = _t / 3600; // Секунд в часе
_t -= _t/3600*3600;
mm = _t/60; // Секунд в минуте
ss = _t - _t/60*60;
}
2) Функции потокового вывода действительно пишут данные в буфер. Размеры буферов и конкретное поведение зависит от операционной системы. Насколько я знаю, есть функции принудительной очистки буферов вывода - посмотрите flushall(), fflush() и т.д.

Желаю удачи!
Ответ отправил: Sergey A. Wedensky (статус: 3-ий класс)
Ответ отправлен: 29.09.2006, 09:25
Оценка за ответ: 5
Комментарий оценки:
1) Да, я преобразовал _t в секунды, которые находятся в одних (текущих) сутках - дальше уже разобрался - спасибо!
2) fflush(stdout) работает! А вот flushall() у меня нету.

Отвечает: ENS
Здравствуйте, Стомов Евгений!
Во-первых у Sleep в скобках не секунды, а милисекунды. И если поставить значение побольше то все нормально выводится.
Сначало одно слово затем второе.А про время смотри MSDN.
С уважение ENS.

---------
Учение - свет!
Ответ отправил: ENS (статус: 4-ый класс)
Ответ отправлен: 29.09.2006, 16:16
Оценка за ответ: 2
Комментарий оценки:
1) Во-первых, у sleep() не миллисекунды, а секунды.
2) Во-вторых, как я уже понял, ввод-вывод буферизуется, так что пример в приложении работает именно так, как я описал - пауза ДО фразы, а после паузы - фраза целиком!
3) В-третьих, я пишу под юникс => MSDN мне мало чем поможет.


Вопрос № 57.094
Привет экспертам.
Возник вопрос: каким образом работают чаты для локальных сетей.
Недавно встретил очень интересный чат когда посылаешь сообщение оно приходит всем и рассылается всем начиная ну допустим с 127.0.0.1 по 127.0.0.255.
Как можно реализовать такую задумку у меня в чате??? То есть никаких сервиров или что-то в этом роде не требуется! Помогите пожалуйста можно присылать примеры реализации основанные как на TCP так и на UDP разберусь.
И меня тревожит один но очень нудный вопрос я уже много литературы прочитал по C/C++ и WinAPI! Но никак не могу понять как можно соединить 2 строки например char A[15] и char B[1024] то есть хочу в чате сделать так чтоб когда пользователь отправляет сообщение было видно от кого оно .
Ну или хотя бы соединить char A[1024] с char B[1024] Есть ли WinAPI функция для этого???
Ну вроде и всё.
С уважением,
Zmeu.
Отправлен: 29.09.2006, 02:09
Вопрос задал: Tamashev Denis M (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: NextStep / www2
Здравствуйте, Tamashev Denis M!

1. Для определения активных клиентов чат отправляет в локальную сеть широковещательный UDP-запрос по адресу IP | (~Mask), если IP-адрес и маску подсети представить в виде 4-байтных целых чисел. Этот UDP-запрос отправляется на определённый порт, который все чат-клиенты слушают. При этом каждый клиент при получении такого запроса отправляется UDP-ответ, который говорит о том, что клиент активен.
Чтобы информация всегда была актуальной, запросы периодически повторяются.

2. Для отсылки личной информации обычно используются TCP-соединения, а для отсылки информации для всех используются UDP-пакеты.

Примеры, к сожалению, выслать не могу - написанием чатов не занимался.

3. Строки соединяются например так

char A[1024];
char B[1024];
char C[2048];

strcpy(C, A);
strcat(C, B);
---------
Нет правил без исключений, правило без исключения - это исключение из правил.
Ответ отправил: NextStep / www2 (статус: Студент)
Ответ отправлен: 29.09.2006, 07:02
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое.


Вопрос № 57.109
в С++.создать абстрактный тип данных (структура), дом у которой

есть название фирмы строителя, адрес, количество этажей и квартир.

определить функции установки, изменения данных, сравнения домов.

для задания текстовых полей использовать оператор new. освободить

память. в maine привести пример сортировки домов по количеству

этажей и адресу в алфавитном порядке.
Отправлен: 29.09.2006, 10:14
Вопрос задал: Mandarin4ik (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Sergey A. Wedensky
Здравствуйте, Mandarin4ik!

Вообще-то это не вопрос, а просьба "напишите за меня... зачет горит (или что-то в этом роде)!"

См. приложение.

Приложение:

Ответ отправил: Sergey A. Wedensky (статус: 3-ий класс)
Ответ отправлен: 29.09.2006, 11:04


Вопрос № 57.120
Приветствую уважаемые!
Срочно нужна помощь! Сам язык с++ я более мение знаю, а вот програмирование под виндовс еще не очень освоил. Моя задача состоит в том, чтоб в программе сделать возможность просмотра картинок. Причем для отображения картинок надо использовать IE через COM интерфейс. Подскажите пожалуйста примерчики, с чего начинать и т.п.
Зарание спасибо.
Отправлен: 29.09.2006, 10:59
Вопрос задал: Sn8p (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vaga
Здравствуйте, Sn8p!
Начинать надо с изучения COM.
Дейл Роджерсон "Основы СОМ"
Том Армстронг "ActiveX-Создание Web-приложений"
---------
Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец
Ответ отправил: Vaga (статус: 3-ий класс)
Ответ отправлен: 29.09.2006, 15:48


Вопрос № 57.164
Здравствуйте.
У меня компилятор bcb6 и он ругается когда я пишу так:
int n=3;
int h[n]={1,2,3};
Не могли бы вы объяснить что не так, или так писать нельзя.
Отправлен: 29.09.2006, 19:37
Вопрос задала: Builder (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Melamed
Здравствуйте, Builder!
В С++ индекс в статистических массивов надо указать константой или вообще не указывать, например
int h[] = {1,2,3};
или
int h[3] = {1,2,3}

Если число злементов в массиве предпологаеттся число переменное, то под него необходимо память выделать динамически. Пример инициализации такого массива показа 085; в приложении.

В последнем случае, когда надобность массива пропадет, не забудте уничтождить выделенную под массив память оператором delete [], чтобы избежать утечки памяти

Приложение:

Ответ отправил: Melamed (статус: 5-ый класс)
Ответ отправлен: 29.09.2006, 20:05
Оценка за ответ: 5
Комментарий оценки:
Благодарю

Отвечает: UnRe@l
Здравствуйте, Builder!
Можно сделать так:

const int n=3;
int h[n]={1,2,3};
---------
Cogito, ergo sum (c) R. Descartes (1596-1650)
Ответ отправил: UnRe@l (статус: 1-ый класс)
Ответ отправлен: 30.09.2006, 05:25
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Хватов Сергей
Здравствуйте, Builder!

Конечно, нельзя. Вообще нельзя задавать размер массива выражением.
Правда некоторые компиляторы это допускают (gcc к примеру), а там где это недопустимо, можно использовать new type[] и delete[] или std::autoptr (если я не переврал его название - у меня используется gcc, где это не нужно)

Но в любом случае одновременно так объявить и сынициализировать не удастся. Придется это делать для каждого элемента.

Приложение:

Ответ отправил: Хватов Сергей (статус: 5-ый класс)
Ответ отправлен: 30.09.2006, 11:05

Отвечает: ENS
Здравствуйте, Builder!
Раз не работает значит так писать нельзя. Поэкспериментировав, я сделел вывод, что int n=3; не инициализирует
эту переменную, просто резервируется место 4 байта.Компилятор ожидает,что эта переменная инициализируется при следующем обращении. А тут еще
массив обявляется такого размера.
Это подтверждается ещё и тем,что если поставить перед int n=3; ключевое слово CONST то все нормально заработает, т.к const больше никогда не изменится.
С уважением ENS.

---------
Учение - свет!
Ответ отправил: ENS (статус: 4-ый класс)
Ответ отправлен: 30.09.2006, 13:29
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное