Expodes, Еслибы условие было такое:
if (strcmp(surname, en.surname) == 0 || en.meanMark==5)
то было бы так как говорит препод, но у вас условие:
if (strcmp(surname, en.surname) == 0 && en.meanMark==5)
двойка преподу.
Но это то же самое, что и объединение условий через логическое И.
Для доказательства своей правоты просто внутри if выводите сообщение на экран перед записью: фамилию и оценку. И убедитесь сами и убедите препода, что другие варианты не проходят. В файле должны быть варианты, которые бы сработали по варианту препода.
Expodes, Почитайте уже что-нибудь по логическим операциям.
У вас в if двойное условие:
1.strcmp(surname, en.surname) == 0 - проверяет что en.surname==surname
2.en.meanMark==5 - проверяет оценку
Объединяются 2 условия логическим И (&&), это значит что операторы в теле if выполняются только когда оба условия истинны (т.е. когда оба условия одновременно выполняются), что вам и нужно.
Про смену позиции это всего лишь предположение, т.к. я не знаю структуру файла. Сменить позицию в файле можно с помощью fseek или fsetpos, узнать текущую - ftell.
Expodes, у вас в условии запятая, а нужно &&, как сказал Александр Ананьев
И еще, вам нужно перед записью переместить позицию в файле назад на sizeof(ENROLLEE) байт, иначе записью вы затрете следующего студента в файле.
Oopss, Честно говоря, никогда не пользовался этой фишкой, всегда была возможность поставить WSUS, поэтому не знаю от каких служб/настроек зависит этот функционал. Думаю стоит поискать в поддержке микрософта.
Darkzenon, тогда лучше и оставить ее на сайте, только причесать единообразно. А в ексел можно просто выгрузку сделать, чтоб начальству показать, но оно, начальство, может и на сайте посмотреть, наверное.
PHPjedi, Что 1 - не вариант совсем? Жестко забито в код? Иногда даже в исполняемом файле можно подкорректировать какие-то строки в шестнадцитиричном редакторе.
2.Любой сетевой интерфейс компа может иметь несколько адресов. Просто добавьте к 125 адресу 222 и он будет откликаться на оба.
lojcin, UEFI как правило поддерживает загрузку в обоих режимах, обычно в настройке БИОС это можно указать. Загрузка с MBR в UEFI BIOS обычно завется "legacy boot".
Если система загрузилась в EFI режиме, то винда будет ставиться только с GPT. Статья по этому поводу.
Сергей Этот вариант сработает только для паролей пользователей, которые были реально залогинены (т.е. их пароли вводились с клавиатуры и сохранены в памяти процесса lsass) до перехода в режим гибернации, имхо.
А тут несколько иная задача - пользователи не залогинены и паролей не знают.
Как-то играл с mimikatz - потрясающая вещь :-) Не знаю, работает ли она до сих пор или может мелкософт что-нибудь предпринял.
Как в сети резолвятся имена компов (DNS/WINS/NETBIOS)?
Когда не можете получить доступ по имени, можно ли получить доступ по IP адресу?
Например, если ваш \\server имеет адрес 192.168.1.10, то можно подключиться к нему так:
\\192.168.1.10\
Обычно, если сеть ... ну больше 10 компов, например, и/или есть выделенный сервер, то есть смысл развернуть службу каталога. Active Directory - служба каталога от микрософт, встроена в винду. Для ее развертывание необходимо наличие Windows Server в сети. С ее помощью можно централизовать управление сетью/пользователями/компами/правами доступа и т.п. В общем в большой/средней сети это вещь крайне полезная. Эта тема очень обширная, если вам требуется АД, то рекомендую почитать какую-либо литературу про нее, а потом уже разворачивать в сети.
Для нормальной работы сетевого окружения и общего доступа нужно:
1.включить обнаружение сети, общий доступ к файлам и принтерам, защиту паролем, если в сети есть компы с ВинХР, то нужно выбрать шифрование 40-56 бит, если нет - 128.
2.Все компы сети должны находится в одной рабочей группе.
3.Для нормального преобразования имени компов в IP адрес лучше всего развернуть DNS сервер. Если развернуть динамический DNS, то компы сами будут прописывать себя в DNSе, это избавит от ручного поддержания актуальности DNSа.
Вместо DNSа можно использовать WINS.
Оба варианта потребуют прописывания адресов DNS/WINS серверов на всех рабочих станциях.
Автоматизировать процесс прописывания адресов (IP, маски, DNS, WINS и много чего другого) можно с помощью DHCP сервера и включения динамического получения адреса на компах. Но пока с этим можно не заморачиваться.
Если в сети есть Windows Server, то DNS, WINS, DHCP службы есть в его составе. Если Windows Server нет, то можно развернуть какой-нибудь линукс и настроить эти службы там (кроме WINS).
4.Если в сети нет Windows Server, то нужно решить вопрос с master browser на всех компах в сети. Или если в сети несколько Windows Server, но нет АД, то вопрос с master browser нужно решить на только на них. Погуглите на эту тему.
Можно еще службу индексирования отключить, но пропадет поиск. Раньше она могла довольно сильно грузить проц. На 8.1 не знаю как обстоят дела, но на Вин10 не замечал за этой службой подобного поведения.
Хотелось бы знать, чем вызван вопрос? Можно поотключать много чего, только, обычно, кроме потери функциональности это ни к чему не приводит.
Вам и не нужно запускать из-под СИСТЕМы, запускайте с правами обычного пользователя, лучше завести отдельного пользователя для этих целей, которым сами никогда не будете пользоваться. Проверьте, что приложение под этим пользователем работает при ручном запуске.
Богдан, Что бы снять вопросы к планировщику для теста запустите простейший скрипт, который бы что-нибудь выводил на консоль/файл в цикле (возможно стоит начать с простого батника, потом перейти к простому скрипту на ruby). Если этот простой скрипт будет работать, значит планировщик делает свое дело. Тогда нужно разбираться почему не работает ваше приложение.
Отличия запуска из планировщика от запуска в ручную в винде только в правах доступа пользователя из под которого стартует задание и в текущей папке (если не ошибаюсь, при запуске задания текущей папкой становится system32, иногда это имеет значение).
Богдан, Это то же вариант, но не хороший.
1.в свойствах задания в планировщике задается пользователь под которым стартует задание
2.задать триггер задания на старт при загрузке ОС + запретить останавливать задание
3.по идее консоль у вас будет открываться еще до входа пользователя и при входе должна оставаться. Не знаю что с ней произойдет при выходе пользователя.
Для старта задания перезагрузитесь или стартуйте вручную из планировщика.
С пользователем СИСТЕМА задание, скорее всего стартовало, но тут же завершалось из-за недостаточности прав. СИСТЕМА это не Администратор, ей нужно давать права непосредственно и по умолчанию у нее права не везде.
Чтоб консоль не закрывалась запускайте задание через командный файл, в котором укажите последней командой: pause.
Заведите специального пользователя для задания с правами простого пользователя, настройте среду пользователя так что бы приложение нормально работало под ним, запущенное вручную, затем настройте задание в планировщике от имени этого пользователя.
PS: после того как вы придете к окончательному варианту старта у вас встанет вопрос: а что делать, если по ошибке прибили работающее приложение? Перезагружать сервер - не слишком удачный вариант.
Богдан, вообще, верно другие коллеги советуют, в вашем случае самым простым вариантом будет использование планировщика.
Он работает, просто надо научится его готовить.
Богдан, Все приведенные методы как раз этим и занимаются, кроме 3 и 4 в варианте с HKCU.
Но стоит помнить о том, что ЛЮБОЕ приложение в винде (и не только) работает с правами некоторого пользователя, не зависимо от регистрации пользователя в винде.
Т.е. когда вы в шедулере создаете задание в настройках указываете от какого пользователя будет запускаться это задание. Со службами - аналогично.
С автозагрузкой из реестра то же, только пользователь выбирается автоматически по следующему алгоритму:
1.если приложение стартует на основании записи в реестре в ветке HKLM, то оно будет работать от имени пользователя СИСТЕМА
2.если приложение стартует на основании записи в реестре в ветке HKCU - от имени текущего зарегистрированного пользователя. И в этом случае приложение не запустится пока пользователь не зарегистрируется в системе. При выходе пользователя приложение будет остановлено.
if (strcmp(surname, en.surname) == 0 || en.meanMark==5)
то было бы так как говорит препод, но у вас условие:
if (strcmp(surname, en.surname) == 0 && en.meanMark==5)
двойка преподу.
Возможно он хочет от вас увидеть такой код:
Но это то же самое, что и объединение условий через логическое И.
Для доказательства своей правоты просто внутри if выводите сообщение на экран перед записью: фамилию и оценку. И убедитесь сами и убедите препода, что другие варианты не проходят. В файле должны быть варианты, которые бы сработали по варианту препода.