Вопрос № 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() пишет в буфер изначально?).
Если я прав - подмигните. Нет - объясните, пожалуйста, причину. И как вообще избавиться от этого явления?
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.
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 привести пример сортировки домов по количеству
Отвечает: 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 Комментарий оценки: Большое спасибо!