Вы видите копию треда, сохраненную 27 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, пользуйтесь https://ideone.com/#, https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf
- man/Dash/zealdocs
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Что еще почитать:
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
https://github.com/kozross/awesome-c
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №48: http://arhivach.ng/thread/495505/
- №49: http://arhivach.ng/thread/496205/
- №50: http://arhivach.ng/thread/502813/ >>1518919 (OP)
Ничем. const - для программиста и компилятора в основном. Но да, компилятор может положить static const или некоторые литералы в сегмент, доступный только на чтение, и тогда при попытке что-то поменять программа свалится. Если у тебя микроконтроллер, то этот сегмент обычно физически недоступен для записи вообще или без плясок с бубном, а если десктоп, то требующиеся атрибуты сегмента записываются в исполняемом файле.
ничем
создатели си поэтому поводу очень не хотели добавлять const в язык и сделали это только под сильным давлением общественности
Фактически const добавили в комитете по стандартизации, а не Ричи с Томпсоном.
Ну, хуярим немношк указателей и у нас работает. Это, правда.
Дана строка состоящая из слов разделённых пробелами. Нужно вывести слово с максимальной длиной, порядковый номер этого слова, и номер позиции с которого оно начинается.
Вектора нельзя, стринг нельзя. Чисто строка как чаровский массив.
Помогите пожалуйста
за один проход все делается.
Тебе нужно на каждом пробеле сравнивать расстояние до прошлого пробела с последним рекордом, если расстояние больше чем рекорд, то ты это расстояние и индекс-расстояние+1 записываешь. В конце просто выводишь
Ну я пытался так сделать, но у меня нихуя не вышло и я психанудл и удалил всё, если ты шаришь, может объяснишь мне всё например в дискорде. Не за бесплатно конечно, можно о цене договориться
Бляяяяя дай лучше мне денег!!! это же хуйня на самом деле. самый стоковый конечный автомат с inword-outword.
Да я понимаю что хуйня, но я оч ленивый и тупой, поэту и хочу найти человека чтобы подтянуть мои знания
Гуглится оно не очень, ну или просто запросы у меня хреновые.
Спасибо.
походу он просто не знал как срез строки вывести, вот и вывел сичтемколом
ч?
Сел и пишешь, не надо никакую архитектуру обкатывать, думать в какой манере код писать и прочие проблемы крестов.
>думать в какой манере код писать
Когда пишешь на цэпепе, не используй функции из библиотеки C, только std, только хардкор. Я решил твою проблему.
Прямолинейность - это да. Но разница лишь в том, что сишечка меньше вопросов задает при фокусах с памятью, всякими километровыми кастами мазать код не надо. А архитектура уровня laba2.cpp на любом языке зашквар при большом масштабе проекта, так же как и проебать большую часть времени на написание абстрагирование каждого чиха, когда у задачи есть фиксированное начало и конец в пределах нескольких сот строк код.
дык инклудишь <cstdio>, а не <stdio.h>, и будет тебе std::printf
Код это код, как написал так и будет. Кресты не ограничивают, проблем нет, только кривые руки танцора.
код = функция(&данные)
Есть ли какое-либо соглашение какой код ошибки должен быть при успехе? Просто логично использовать положительное значение - истинность возвращаемого значения глазами читается как успех выполнения, но тогда нельзя указать несколько вариантов ошибок. Если поставить успешное выполнение на 0, то мозолит глаза постоянная проверка !что-то. На какой стул сесть?
Эта социошлюха, вместо написания кода беспокоится быть как все, а то вдруг погонят.
Куда бы ни попала, что бы не делала, на уме только одно - социоблядство.
Зависит от того, сколько вариантов ошибок тебе нужно получать. Если только успешность/неуспешность исполнения, то 0 при ошибке, и любое другое значение при успехе. Если вариантов несколько, то выносишь ошибки в дефайны, а 0 сигнализирует успешное завершение. По типу такого:
int err = func(data, buf);
if(err) {
if(err == ERR_DATAOF) free(buf);
else HandleCriticalErr();
return;
}
Есть ещё третий вариант - возвращать 0 при ошибке исполнения, а код ошибки ложить куда-то в глобальную переменную (либо функцию по типу GetErrCode(), которая это значение откуда-то получает), если тебе код ошибки нужен только изредка, а получать ненулевое значение при успешном выполнении хочется; но это уже извращение.
Но ведь вариант с разными кодами ошибок и 0-success соответственно предполагают, что ты этот код еще будешь смотреть, а значит возвращенное значение использовать несколько раз, а значит сначала присваивать его переменной по-любому. Ну, а ! или 0== это на любителя, не желающего обрабатывать ошибки должным образом.
>Норм выглядит
>0 == yoba
Хуйня, у меня моцг такую логику не понимает, что то должно равняться константе, а тут 0 равен чему то, пиздец короче
Что тебе не нравится? Значение функции же выползает из ее имени и присасывается к переменной, когда присваиваешь. Вот ты на месте это переменной ставишь константу и сравниваешь. Гораздо более читаемо, чем после скобок с аргументами. Хуй найдешь там справа. А так и вызов никуда особо не уехал, и константа перед глазами. Это норм практика, писать раздуваемые в длине выражения справа.
i[0] = 1;
Почему ругается на рид онли, я ж указатель не меняю?
В винапи подсмотри. 0 успех, < 0 ошибка, > 0 статус, доп информация.
охуительно, особенно когда функция до шести параметров принимает
>звучит
Я имел ввиду, отрицание ассоциируется с тем, что что-то не так, а 0 - с отсутствием проблем.
>функция до шести параметров принимает
Это то при чем?
>отрицание ассоциируется с тем, что что-то не так, а 0 - с отсутствием проблем.
Только в твоих фантазиях, все ошибки и статусы всегда заменяются дефайнами.
> Если поставить успешное выполнение на 0, то мозолит глаза постоянная проверка !что-то
Это единственное, что тебе мозолит глаза в таком языке, на си? Тогда ты очень избирателен
if (!SUCCESS(vasyanfunc())) {
printf("puk");
}
>>44382
а персонально тебе - ты пидор и неудачник, стыдно быть тобой
Обычно возвращается код ошибки, а 0 значит "нет ошибки"
>int const i = malloc(sizeof(int)5);
>i[0] = 1;
звезду перенеси перед const
https://ravesli.com/urok-87-ukazateli-i-const/
Ну ты же хочешь поменять в рантайме const char*, конечно это упадет
Неосилятор шиндусятнек с первого курса плез
Ты когда malloc делаешь у тебя структуре новый адрес выдается.
Ловите ньюфага.
ого каким стайлгайдом пользуешься? а piton-dalbaeb знаю такой
Меня охуенно радует что нигде в мире не написано и не объяснено каким хуем это должно работать и что нужно сделать чтобы это дерьмо работало, и единственный способ узнать как что-то запрогать на этом "языке программирования для людей"... Нажмите на ссылку чтобы узнать!
И ни один "рабочий" код в интернете не работает. Охуенно правда? Программирование это охуенно.
Ты должен не int возвращать, а указатель на структуру и уже то что вернулось проверять, равно оно нулю или нет.
Я передаю блядь УКАЗАТЕЛЬ НА СТРУКТУРУ КАКОГО ХУЯ ОН НЕ СОХРАНЯЕТСЯ
Я об этой хуйне уже в 11 классе от учителя узнал, а тут взрослый ньюфажка с двача не может разобраться лол
Похоже на visual studio code
Программа таки заработала нормально.
https://pastebin.com/RNHJrMWy если кому интересно
>>45580
Через консоль компилить слишком сложно и непонятно и нет возможности построково прогу выполнять, а качать вижал студио 2007 с троянами слишком страшно.
>>45600
Че охуенно умный да? Родился сразу сеньёром да? Слышь может за гаражи зайдём дон? Сколько жмёшь от пола дон?
>Слышь может за гаражи зайдём дон?
спасибо, но нет
предпочитаю отсос от 17ти летней студенточки
>очередной школы 21
двачую
лучше бы мышцы качали - это хоть бы пригодилось когда грузчиками в пятерочку пойдут вкалывать, хотя бы не сразу позвонки на спине сотрут, а лет через 7м
Так сисюны, вот вам реальная задача, есть последовательный сортированный числовой массив размером не больше 1000 и нужно искать в нем элементы быстро аки боженька, кроме бинарного поиска еще что нибудь есть?
Есть предложения? Проблема еще в том, что нужно знать размер массива, а это инт занимающий память...
С бинарным поиском худший случай слишком долгий. Но альтернатива это ток экспоненциальный наверное или интерполяционный, и там худший случай тоже хуевый
> if (!SUCCESS(vasyanfunc())) {
> !SUCCESS
А там ведь еще и FAILED есть, чего ж не притащил? И это плохо выглядит, когда тебе этот статус еще потом нужен.
>>44965
> if (0 = yoba) // компилятор поднимет шухер
А потому что нехуй с нулем сравнивать. Традиционные проверки if (func() != 0), if (!func()), ну и всякие там if ((x = malloc()) != NULL). Ошибиться негде, проблема надуманная. Алсо, этот кривой стиль все равно не защищает при сравнении с переменной.
>>45695
Создаешь тысячу элементов, инкрементируешь те из них, для которых в твоем изначальном массиве есть элемент, получаешь поиск с O(1), идешь нахуй со своей баянной задачей для детей.
>для которых в твоем изначальном массиве есть элемент
Есть во всех, все элементы массива заполнены
> Есть во всех, все элементы массива заполнены
build_lookup: table[0..max] = {0}; for elem in src { table[elem]++ }
lookup(x): table[x] != 0
Хелло-ворлд
А мог бы вместо языка плебеев, писать на языке сверхлюдей.
11 итераций это слишком долго? ты че ебанутый?
Пофиг
Какой может быть поиск кроме деления пополам?
Нахуй иди, в школе21 с нуля сишную либу пишут, в том числе и strcpy и принтфы всякие, при желании и на ассемблере
Таких дегенератских вопросов там никогда не будет
ох ебат, вот это уровень
>в школе21
имхо, если к вам в байтоебскую контору на тех собес через hr пробился челик с этих курсов, то лучшее что вы можете сделать для своей безопасности и безопасности своей конторки - это безапеляционно слить его в унитаз
> принтфы всякие
Ну-ка притащи посмотреть %f, правильно реализованный новичком, у которого нет опыта и просто физически не может быть достаточно времени, чтобы разобраться с деталями.
Но результат-то достигнут. В условиях не было запрета на использование стандартной библиотеки.
>В условиях не было запрета на использование стандартной библиотеки.
Ты даже постановку задачи не понял.
> В условиях не было запрета на использование стандартной библиотеки.
> в школе21 с нуля сишную либу пишут
>в школе21
Этож сберкек. Они в этом своем сбербанке до 2010 (а то и дольше) сидели на ДОСе или каком-то досоподобном говне.
И даже щас у них юзеринтерфейсы изобилуют идиомами досовских времен, лол.
>с нуля сишную либу пишут
Это есть в книжке K&R
>до 2010 (а то и дольше) сидели на ДОСе
Ходил пару лет назад паспорт менять в стол, увидел оригинальный Midnight Commander на одном из компов, подохуел.
Чето я не понимаю, там же курсы для вкатоидов, и вроде они не так давно работают чтобы кто-то из тамошних реально получил квалификацию достаточную для того чтобы на техсобес попасть
>>49051
блять ты даже не понимаешь насколько смешно выглядит то что ты пишешь. Ни один вкатоид, в какой бы ГеНиАлЬнОй школе он не "учился", не сможет реализовать что-то из стандартной библиотеки ДЕЙСТВИТЕЛЬНО на уровне стандартной библиотеки. Посмотри соусы в том же кланге и подумай как смешно выглядит то что ты говоришь.
>github ecole 42 ft_printf
вот эта хуйня это подтверждает.
Кстати, да, а нортон этот лицензионный? Может надо засудить эту шаражку?
>отечественного производителя
>Автор программы — украинский программист Всеволод Волков.
Молодой человек, пройдёмте с нами вон в ту комнату. У нас для Вас есть пара вопросов об исполнении федерального закона 44-ФЗ и в частности постановления правительства "Об утверждении плана по импортозамещению программного обеспечения” от 01.02.2015 № 96.
Я чет думал, что он был написан где-то в 90-91 годах, а не 92, так что да, заслужил.
text1
text2
Жопу себе флашни, блядь. А fgets, в отличие от smashing-smahing-detected-gets, не вычитывает '\n'.
fix
и вот почему такую банальную инфу не пишут в книгах? хуле я зря чейтал их нахой, и вот нахрен ты пишешь без дела
Да я рофлю, анон. А книги только путь указывают. Если ты предпочел не спрашивать совета в /b/, чтоб услышать, что Си не нужон, а таки решился на вкат, то предполагается достаточная самостоятельность, чтоб пробить man gets/fgets и все это уточнить. Что до пикрильского, это я намекнул, что твоя программа отвечает за удержание вывода, чтоб буфер флашить, а у тебя ВВОД. Он приходит с терминала (читай другой программы), и даже если у твоего процесса щечки покраснеют от ожидания, это не поможет, если терминал решил придержать stdin. Но по '\n' он 100% флашит, иначе ты бы свой код не скомпилировал даже, лол.
Что за бред. В той же консоли стандартная команда ввода в файл, печатай энтеров сколько влезет пока не нажмешь ctrl-z или как там.
Збазиба
Ну просмотрел стандартную либу си и решил на задачах отработать, но чет бомбанул (от того шо сам не разобралса) шо не смог прочесть две строки с переносом строки. Ща разберусь, спасибо
выёбываешься, щенок
my fault, там не гетс \n вычитывает, но не пишет в строку
Ты чё несёшь ваще? Эти треды для того и есть, чтобы по теме общаться, спрашивать, рассказывать. Просто этот тред мертвый.
51 первый тред, у яваскрипта 150-й
показывает, шо сишники самодостаточные интроверты, песдуй на кухню если хочешь общения
Флуд дебилизмом только привлекает еще больше дебилов, а нормальные люди от этого уходят. В результате смерть треда, остаётся зомби только профитный хостеру, ведь ему главное количество посещений и постов, а на качество похуй.
>thread.h
Каждый раз триггерюсь с этой glib. Вот почему всякие strchrnul, tsearch и прочие расширялки завезли, а C11 хуй? Только в 2.28, на которую пинус еще не переехал, и хрен ты кому в Си-треде pastebin с этими thrd_create скинешь, чтоб он cc сделал без установки второй версии?
Оттуда же, откуда
>в Си нет многопоточности
ну лол же. Таким тупорылым обмудкам в лицо плевать, или игнорить, если физическое лицо вне досягаемости.
Доступ к полю структуры через точку это не ооп парадигма, это сиподобный синтаксис. Ты вообще знаешь что такое указатель? В си нет объектов, они появляются в расширенных си, таких как Objective-C и C++. А вообще объекты перед этим появились далеко не в С а в SmallTalk, на его основе был выпущен Objective-C, а потом уже и C++
Чистое ООП предполагает полную инкапсуляцию состояния объекта и взаимодействие с ним исключительно посредством интерфейса. На Сишечке это элементарно реализуется (void ∗), но писать только такой код означает делать такую же строгую и неповоротливую архитектуру, как можно на любом более высокоуровневом языке в меньше строк, то есть лишено смысла. Си нужен для стрельбы по ногам, и поэтому практически все, что на нем написано и реально использует его преимущества, нарушает принципы ООП.
Троллинг тупостью? Си это процедурный язык без поддержки объектно ориентированной парадигмы.
мимо олд 7 лет на сишечке
> Чистое ООП предполагает полную инкапсуляцию состояния объекта
Мало ли где там что предполагает. С этой точки зрения кресты, которые требуют все кишки класса обязывают выставлять наружу в .hpp - это вообще не ООП-язык. В то же время сишка позволяет incomplete-структурами это состояние успешно скрывать.
Считать будем в произвольном куске памяти. Как я себе это представляю.
Смотрим поледний бит,
Текущий бит:
если 0, то меняем его на 1 и закончили
если 1, то меняем его на 0, двигаемся влево, гото Текущий бит
Вы пока отвечайте, а я подробнее распишу.
Если подробнее
Стартуем:
ставим курор на крайний правый бит (с = 0х1)
Начинаем считать:
Сравниваем текущий бит с 1 ((b & c) == c)
если он 0, то переключаем его (b ^= c) и заканчиваем
если он 1, то переключаем его (b ^= c), двигаем курсор (с<<=1) влево и гото Начинаем считать.
printf надо тоже убрать в else.
Как нельзя? Почему нельзя?
char c[128];
long ∗p = (long∗) &c;
for(int i = 0; i < 128/8; ++i) {
∗p &= 0x7F7F7F7F7F7F7F7F;
p++;
}
Код выше, к примеру, применяет битовый AND (И) по отношению к массиву чаров (по 8 байт/чаров за раз). Если конкретнее - очищает старший бит каждого байта.
>по отношению к массиву чаров
Ну так я и говорю, что вопрос в произвольных кусках. Например, шифтануть влево на два байта 3000-битное число. Понятно, что его можно разбить на массив и двигать по кускам, но я надеялся, что руками этого делать не придётся.
Так зачем руками-то? Напиши функцию. В Python и Haskell к примеру, есть шифт битов в числах произвольного размера, но работы с памятью нет, да и скорость работы этих возможностей далеко не потрясающая (в питухоне особенно, на небольших числах даже умножение дороже шифта битов). Алсо учитывай, что работать удобно сможешь только с числами, кратными байту, а та же функция на ассемблере будет не намного сложнее (если ты, конечно, знаешь x86-64), но в разы эффективнее.
Даже функции потребуют использования обычных чисел, а я хотел этого избежать. Вон выше, произвольный счётчик пытался сделать исключительно на битовых операциях, но он ограничен самым длинным целочисленным типом, хотя в самой архитектуре счётчика я этого ограничения не вижу, можно просто ползать влево-вправо по битам и всё. Хотел расширить до работы с произвольным отрезком памяти.
Сегфолты предполагались. Просто пытался понять, достаточно ли сишка низкоуровневая, чтобы настолько с битами играться, но, судя по всему, для такого необходимо городить огороды из массивов, чем заниматься не хочется. Финальная идея была в том, чтобы в лоб побитово производить всякие большие математические операции, типа умножить 200 значное число на 300 значное. Посмотреть, как современные процессоры с таким справляются.
Смотри, на чистой архитектуре x86 нет опкодов для работы с числами большей битности, чем машинное слово этой архитектуры, так что под капотом без извращений это по другому реализовать не выйдет. На ассемблере можно, конечно, было бы поизвращатся со всякими там AVX, но это тоже не универсальная оптимизация. Вообще не понимаю твоего бугурта, т.к. функции подобного плана без оптимизаций пишутся достаточно быстро, разве что ты хочешь вообще все битовые операции подобным образом реализовать, и ещё для не byte-aligned по длинне чисел к тому же.
Никакого бугурта, друг, спасибо за то, что отвечаешь. Просто пытаюсь нащупать "границы" сишечки.
>разве что ты хочешь вообще все битовые операции подобным образом реализовать, и ещё для не byte-aligned по длинне чисел к тому же
И да, хочу. Это же можно сделать, правильно? Понятно, что на конкретном железном процессоре просто так взять и крутить биты не выйдет, он воткнётся в ограничение длины своего машинного слова, это ты правильно заметил. Но вообще, это же реализуемо, верно? Вот я попробовал просто напрямик это написать на C, но был ограничен размером базового типа, а значит нужно их компоновать несколько, то есть усложнять программу, а вся идея была как раз в том, чтоб программа была самая тупая.
Я рассчитывал, что просто напишу, как хочу изменять память, а компилятор уже разберётся, как это делать кусками, удобными процессору.
Понял. Тащемта сишечка на таком низком уровне все-таки неплохо ограничивает, особенно в плане всяких микрооптимизаций и расширений архитектур x86 по типу SSE. Да и вообще для не битовых операций нужно будет на C дикие костыли городить, а тот же результат умножения на уровне ассемблера помещается в пару регистров (фактически промоутит число до количества битов в 2 раза большего), что уже позволяет набросать более эффективный алгоритм. Вообще, если в проде будешь подобное использовать, и лень будет изобретать велосипеды (т.е. производительность не важна будет) - во всяких там Java и C# есть BigInteger с переопределенными операторами, не говоря уже о всякой функциональщине.
>>60137
Для простых битовых операций (and, or, xor) тебе достаточно просто пройтись по всему числу, применяя оператор к каждому из участков памяти, а остаток без alignment замаскировать and после. А дальше - веселее, даже для шифта битов тебе придется что-то интересное придумывать, а на не битовых операциях уж тем более без интересных алгоритмов никак не обойтись.
>Да и вообще для не битовых операций нужно будет на C дикие костыли городить
Так в том и задача, сделать как можно больше через битовые операции над памятью.
> а тот же результат умножения на уровне ассемблера
Я его планировал сделать через битовое сложение. Собственно, для этого счётчик и нужен был, чтобы определять, когда остановиться. Повторюсь, интересно сделать как можно более тупую программу, самый минимум. И для умножения я ничего тупее, чем сложение и счётчик не придумал. Вот начал со счётчика и воткнулся.
>во всяких там Java и C# есть BigInteger с переопределенными операторами
Так любая криптобиблиотека для сишки это уже BigInteger. Не говоря уже о всяких специальных, вроде gmp. И, полагаю, они там уже давно таких оптимизаций наделали, до которых мне годы раздумий.
> А дальше - веселее, даже для шифта битов тебе придется что-то интересное придумывать
Всё так. Но я не хочу придумывать интересное, ради обхода ограничений языка. Не в этом моё желание.
> Да и вообще для не битовых операций нужно будет на C дикие костыли городить
Посоны-то не знают, и пишут длинную арифметику именно на сишке.
>>60148
> битовые операции над памятью.
Ты какой-то хуйней страдаешь. Битовые операции не нужны, достаточно обычных операций над массивом uint_fast32_t.
> для умножения я ничего тупее, чем сложение и счётчик не придумал
В столбик в школе считать учили?
Не совсем по C вопрос, но, тащемто, связанный с выполением заданий из K&R.
Как отключить построчную буферизацию в терминале? Ubuntu 18.04, bash.
unbuffer и stdbuf -i0 -o0 -e0 не работают.
А то пошел K&R проходить по порядку перед сессией после семестра гвидопыха, ибо гвидолабы сданы на отл. обгвидку-преподавателю, чтобы повторить основы теор. курса с нормальным языком в руках, а тут такие неприятные мелочи.
Разве возможно отключить буферизацию stdio.h извне? Сделай setbuf(stdout, NULL); или fflush(stdout)
подписался на тред
и насколько это актуально? типо мемранки программировать? для diy обычно сами на ардуино лепят
>Посоны-то не знают, и пишут длинную арифметику именно на сишке.
Так, давай не путать посонов, которые пытаются что-то полезное сделать, и меня.
>Ты какой-то хуйней страдаешь.
Это очевидно.
>В столбик в школе считать учили?
Так, а чем принципиально умножение в столбик отличается от, так сказать, обобщённого умножения? 3 на 5 умножить, и 42154352345 на 3467645645745 для меня одно и то же.
>Битовые операции не нужны
Так, я пожалуй объясню, что я пытаюсь сделать с нуля. Представь себе человека, который вообще ничего не знает о математике и, тем более, программировании. Даже таблицу умножения. и ты его учишь, начиная с двоичной системы счисления. Мне попался хороший ученик в виде компьютера, он уже понимает, что такое 0х0, 0х1, =, ==, ^, <<, и &. И я хочу из этого научить его считать. Для начала просто считать вверх, что я относительно успешно реализовал, учитывая ограничения C.
Но именно этого я и не хочу, я не хочу учитывать ограничения С, я хочу просто менять биты в памяти. Не в беззнаковом целом, не в массиве чаров, и даже не в структуре или битовых полях, а просто в куске памяти. Хочу просто бинарную математику, а не ограничения в длину слова процессора или базовые типы.
Понятно, что я могу это реализовать просто в виде операций над строками, написать свои реализации 0х0, 0х1, =, ==, ^, <<, и & для '0' и '1', но это получится пикрелейтед, не уверен, что я этого хочу.
>>60592
Спасибо!
Дело действительно в организации современных, и не очень, *nix.
http://man7.org/linux/man-pages/man4/console_codes.4.html
Ctrl-D для вызова EOF
Ctrl-H для вызова backspace
Ctrl-? для вызова Delete
> просто менять биты в памяти
Ты не можешь менять биты в памяти, ни просто, ни сложно разве что row hammer какой-нибудь притащишь, и это, наверное, единственный рабочий способ менять именно биты в современных компах. Процессор читает/пишет память даже не байтами, и не двордами, а целыми кэшлайнами. Даже сама DRAM не читает по одному биту.
Но я понял, чего ты хочешь, и думаю, что тебе нужна не сишка, а какой нибудь digital circuit simulator, вот там ты развернешься. Можешь, например, в nandgame.com поиграть, оно как раз для тебя. А когда наиграешься, вернешься в сишку реализовывать арифметику не в base-2, а в base-232.
> Так, а чем принципиально умножение в столбик отличается от, так сказать, обобщённого умножения?
Ну я так понял, что ты сейчас просто суммируешь первый множитель n раз. Это медленно. А вот если ты попытаешься двоичные числа умножить в столбик, как в школе, ты получишь log(n) уже (и это не самый быстрый способ). С бумажки на комп этот алгоритм переносится очевидным способом: если очередной (от младшего к старшему) бит второго множителя равен единице, ты прибавляешь первый множитель к результату, если равен нулю - не прибавляешь. А потом сдвигаешь первый множитель влево на один бит и повторяешь.
>Процессор читает/пишет память даже не байтами, и не двордами, а целыми кэшлайнами. Даже сама DRAM не читает по одному биту.
Я от этого пытался абстрагироваться при помощи сишки. Но сишка слишком близка к железу, а остальные языки слишком далеки от битов.
>digital circuit simulator
> nandgame.com
Спасибо, посмотрю.
>ты сейчас просто суммируешь первый множитель n раз. Это медленно.
Да. Я понимаю. Но хотел в начале обойтись как можно меньшим числом концептов. Любому очевидно, что счётные палочки для первоклассников гораздо медленнее, чем множество других способов, но начинают всё равно с них.
Биты близко к железу, когда же далеко от железа биты не нужны. Таким образом, не бывает близко к битам и далеко от железа.
Это и есть моя проблема!
бросай это дело, всё равно ничего не выйдет
Есть ли вообще смысл учить язык C в маленьком областном центре если мне уже почти 33?
Там дальше интереснее.
>всё равно ничего не выйдет
Хуевый у тебя внутренний голос, он так тебе по любому новому делу говорит? Я вот в электротехнику на старости вкатываюсь, вот там жесть-пиздец, заливаю внутренний голос пивасом и потихоньку иду дальше.
хочешь - учи, не хочешь - не учи. какой еще "смысл"? если вкатиться в ойти, съебать из мухосрани и начать зарабатывать 300кк/сек, то сишечка этому способствует больше, чем бухать с друзьями, гулять на природе и вести полноценную жизнь быдла. но если ты ожидаешь вкатиться не выучив ничего, кроме сишечки, то в 2к19 у этого охуенно маленькие шансы. я советую не сдаваться и идти к цели, особенно в плане навыков, которые денег не стоят и другим людям не мешают.
Я так то уже 3 года и 2 месяца вкатываюсь, если считать с момента когда я впервые эту книгу читать начал. Вот летом в 20-х числах июля решил жёстко взяться. Почти полгода прошло, а я только 300 страниц одолел. Вот и начали меня одолевать смутные сомнения, на фоне полного отсутствия соответствующих вакансий в моём городе. Я как то ожидал большей от себя скорости, но то ли я тупой, то ли книга написана так чтобы дочитать её до конца смогли не только лишь все
>соответствующих вакансий
Так учи то, что востребованно, Джаву например, она С++ на минималках.
Да как то дел с вот этим "вкатиться в ойти" всё нарастает и нарастает. Сначала я начал читать книгу, потом решил что и английский знать надо и взялся за курс на дуолинго. Потом решил что в книге маловато упражнений и добавил курс С на степике. Потом заметил что в книге как то совсем не объясняются возможности современных IDE. Да и вообще спецы рекомендуют командную строку линукс и вим. А там ещё прочитал что постоянное переключение взгляда с экрана на клавиатуру быстро утомляет и надо научиться слепой печати и как то это всё прямо снежным комом нарастает
Ну с С вкатиться в айти нельзя, разве что сразу с него на пхп перескочить, вакансий для вкатывальщиков нет. Имеющиеся это наверняка НИИ, где сам С дело десятое, а главное матеша.
>переключение взгляда с экрана
Ээээ, ты там двумя пальцами печатаешь? Лол. У нас был ведущий инженер, старый пидор с бородой, он двумя указательными пальцами печатал глядя на клавиатуру, мнил себя гуру ИТ, а раньше был геологом, пока их контору к хуям не разогнали, да.
Да я как ступеньку С расценивал. Типа план себе как мне показалось хороший составил:
-язык Си (курс Степик, Прата, К&R)
-ассемблер (курс Степик)
-язык Си++ (два курса Степик, Страуструп)
-алгоритмы и структуры данных (два курса Степик)
А потом уже с наработанным знанием и пониманием вышеизложенного за что то более близкое к наличным вакансиям браться
Не двумя, но и не десятью. Не глядя на клавиатуру вообще печатать не могу. Судя по тому что за клавиатурой я уже более 12 лет сам собой навык слепой печати у меня не появится
>надо научиться слепой печати
С сегодняшнего дня выдели 15 минут в день на это. Я вот, например сейчас учу её. Трачу 15 минут в день. За месяц поднялся с ~80 символов в минуту до ~160. Ничего сложного не, главное заниматься постоянно. Это ещё учитывая, что я максимум бездарь.
>ассемблер (курс Степик)
>алгоритмы и структуры данных (два курса Степик)
Нинужна, ты в отрыве от реальных задач ни хуя не поймешь
Я сам только такой нашёл: https://stepik.org/course/253/reviews Я просто предположил что курс по ассемблеру там есть, или появится за то время которое я потрачу на си
нужно ПРОСТО не смотреть. если не делаешь себе постоянный челлендж, то нихуя не научишься. равно как смотреть кинцо с оригинальной озвучкой, но с сабами - нихуя не поможет, если ты постоянно сабы читаешь. нельзя 12 лет с тренировочными колёсами ездить и потом жаловаться, что ты не научился на велосипеде держаться.
Благодарю, анончик.
а я сразу взял и поехал, спасибо маме за айкью
По-моему, надо просто заставлять себя нажимать каждую клавишу правильным пальцем, необязательно вслепую, но всегда, в любом повседневной печати, большого перерасхода времени не будет. Только поначалу идет медленнее, чем 2-пальцевый набор, как на печатной машинке, но очень скоро привыкаешь и понимаешь, что так НАМНОГО быстрее. А глаза сами перестанут смотреть на клавиатуру.
умею печать вслепую, но не умею в правильные пальцы. обычно недоиспользую указательные и мизинцы. мне кажется, это важно, но не самое главное для умения не смотреть на клавиатуру.
есть двухмерный массив(ака матрица),надо узнать какие числа повторяются больше трех раз,и при этом находятся в разных столбцах
например в матрице 1 2 3 4
1 3 1 3
5 3 4 5
это число 3
с меня как всегда нихуя :3
А если один раз встречается два раза в ряду, то это значение уже не может считаться, или даже если встречается больше 3 раз по одному, но один раз — два раза, то все равно считается? Я пьяный если что извини если не понятно
Счетчик для каждого числа. Ну, не для всех 18 секстилионов сразу, конечно, а по разрядам идешь. 256-элементный массив, который запоминает, во скольких разных колонках встречаются числа, начинающиеся на байт 0x00, во скольких - 0x01, ..., а во скольких - 0xff. Сразу выкидываешь все, что не дотягивает, и рекурсивно идешь по отобранным, считая уже вторые байты. Ну, можешь сразу по 2 байта брать, тогда массив 65536, сам смотри, сколько у тебя памяти. Глубина рекурсии больше 8 не будет. Хотя, может быть большой флоат, там кстати тоже все вполне дискретно. Пробуй, анон. Ничего лучше за 5 минут не придумал.
для каждого символа алфавита делаешь аррей длиной равной длине строки, проходишь по строкам и отмечаешь в новых арреях появление соответствующего символа. потом просто ищешь арреи, в которых больше трех ячеек отмечено.
[5][6]
но желательно на неограниченный
>>62101
знаю,но мой тупой мозг не понимает как это сделать
>>62105
может,считается как одно значение
>>62115
пасиба но сложна,мой ньюфажий мозг расплавился
>>62131
пасибо попробую
типо например тут ответ будет 3 и 6
{6,>3,8,0,0,5}
,{>6,>6,5,7,8,4}
,{4,5,6,>6,1,7}
,{0,4,>3,2,5,0}
,{0,8,7,>3,2,8}
Какие-то ограничения по наполнению массива есть? Могут быть отрицательные, дробные?
синайлы как обычно хотят байтоебствовать и сдвигать разряды. общий алгоритм пиши для произвольного содержимого, для которого определена операция равенства.
Хочу сдвигать разряды, и ты мне не помешаешь!
int
Вот тебе скрин из стандарта. Каждый пункт содержит идентичные объявления.
Если вкратце, то char зависит от реализации, а остальные по умолчанию signed
беторды на бордах всю жизнь пиздили англицизмы, ньюфаг. а вообще потому что я не знаю русских аналогов и вместе с тем ожидаю, что пипл, посещающий данный сайт, способен меня андерстенд без того, чтобы я снисходил до кальки или адаптирования.
Конст в объявлении параметра функции говорит о том, что функция не будет менять то, что лежит по указателю, например. При чем тут дефайн? Ты говоришь про константы в терминах маш.кода (адресные операнды, регистровые и константы), а тут документационный смысл.
Чтобы не плодить копии.
макросы с дженериками
>а то мне кажется что я написал хуйню
Всё так.
>for(int i = 0; c == ' ' && i != 1; ++i) putchar('\b');
Эта строка вообще ничего не делает, если что.
Ну давай посмотрим, что она делает:
i = 0;
проверяет c == ' ' && i !=1; //тут виноват, я прочитал там ==
Если да, то стирает последний символ. Так как пробел мы ещё не напечатали, то это предыдущая буква. Поднимает i на 1; Возвращается к началу цикла for. Проверяет c == ' ' && i !=1. Так как i тут всегда 1, то дальше она ничего не делает.
Если нет, то просто заканчивает for и ничего не делает;
Дальше печатает сохранённый пробел. Возвращается к началу цикла while;
i = 0;
проверяет c == ' ' && i !=1;
Здесь она сотрёт предыдущий пробел, это правда. Но буква уже стёрта то есть for не ничего не делает, а портит, а цикл for никогда не повторяется больше одного раза. Зачем тогда цикл?
Это сработает. Но у тебя 3 if'а в которых ты проверяешь на одно и то же условие. Скомбинируй их в одно. Можешь сделать сам, а потом сравнить со спойлером
https://pastebin.com/TrXzqzRM
Ещё твоя конструкция развалится, если, например, использовать 10 миллиардов пробелов, а условия это не ограничивают. И постоянная печать, а потом удаление тоже странное решение, не проще изначально не печатать?
Тогда тебе нужно делать ещё одну проверку. Не проще их изначально не считать? Тебе же не важно, сколько их было, 3 или 12000? Тебе важно только был ли предыдущим символом пробел.
Например так, да. Но я бы сделал с помощью флага, чтобы не перекладывать каждый цикл переменную.
https://pastebin.com/mxeX9UQx
Хули там писать-то.
Ещё пукнул с того, как оно выглядит на ассемблере.
https://pastebin.com/8aavgL8j
https://pastebin.com/JRwShhj1
Один for для единственного прохода цикла разворачивает, второй switch для единственного условия. Зачем вы это делаете?
Потому что могу.
Что можно придумать? Нашел тему с аналогичной проблемой https://stackoverflow.com/questions/18647053/sendinput-not-equal-to-pressing-key-manually-on-keyboard-in-c
В самом низу есть обсуждение под ответом от Eric Brown, он пишет:
>That implies that the game may well be using DirectInput. Injection might still be possible, but is much harder; you need to open the raw keyboard device and send some IOCTLs to inject raw scan codes. I'm not that familiar with these APIs, so you're on your own...
Но я что-то не понял нихера его. Хз, мб от этого как-то оттолкнуться можно? Или есть другие решения?
структура формата {uint8_t (hour), uint8_t(minute), uint8_t(second)}
и почему он не ругается на это:
if ((time_heater_delay_gap.watch.hour && time_heater_delay_gap.watch.minute && time_heater_delay_gap.watch.second))
немощный компилятор не может работать с структурами в логических операциях, только с элементами?
Ты там структуру чтоли сравниваешь?
> не может работать с структурами в логических операциях
включи режим плюсов и допиши оверлод оператора==
ты блядь как будто не знаешь в какой язык ты пришел
Что за дрочильня? Обход античита это тот ещё рокетсаенс
300x360, 1:48
Не можете? Беда, беда
Чтобы совсем красиво было надо хук использовать, но тогда антивирус срабатывает. Потому что..
а раскладку кто переключать будет? А спец символы итд итп
Поехавший, любой конпелятор сей не позволяет это делать, потому что ты долбоёб.
Если там одни целые и ты 100% уверен, что структуры хранятся одинаково - можешь сравнивать через memcmp()
Чем мечтать о работающих 5 строчках лучше бы помог человеку.
>>66328
Слушай сюда, для sendinput нужен дескриптор окна/процесса которому будет посылаться сообщение. То что ты там нашёл дескриптор с помощью Spy++ это всё хуйня, надо дескриптор определять в реалтайм, и именно тот дескриптор, именно этого подокна. Для это нужно использовать хуки(перехват сообщений), ты перехватываешь сообщение, выдёргиваешь оттуда дескриптор и потом уже sendinputом посылаешь сообщение этому дескриптору. Но хук замутить это пиздец проблема, это уже типа взлома, будет срабатывать антивирус ессно, и вообще надо сильно изловчиться чтоб сделать(но вполне можно).
Второй способ, кривой но работает. Черех keybd_event, ты в программе делаешь модальное окно(которое поверх всех окон), делаешь в программе хоткей посредством GetAsyncKeyState.
Потом ставишь курсор куда тебе надо(наводишь фокус клавиатуры), зажимаешь хоткей, и мышкой наводишь курсор на окно своей программы. У нее срабатывает GetAsyncKeyState, а фокус то остался в твоей иггре, поэтому всё печататься будет туда. Вот такой вот способ. Не знаю глюк ли это или нет, на win7 работает.
В последних шиндах днинпут является оберткой над сообщениями для окон. То есть опять же должен хукаться через винапи. Inb4: держу в курсе.
>чем мечтать
Мань, на том скрине тупо switch/case, который нет смысл таким образом маняоптимизировать - конпелятор уже давно развернет как минимум не хуже, чем васян с книжкой по асму 1995 года выпуска.
Асм это мышление, Асм -это движение, Асм -это жизнь. Асм это способ заставить серое вещество работать. Поэтому я не обломаюсь скопипастить одинаковый код, руки не отсохнут.
>Мань, на том скрине тупо switch/case, который нет смысл таким образом маняоптимизировать
Ты не заметил invoke sleep? Что если в его игре поставили ограничение на время нажатия? Что тогда?
Ух бля... Ну попробую... Кстати, мне советовали один драйвер https://github.com/oblitum/Interception , используя его апи, скормить ему все что надо. Вот его небольшая документация http://www.oblita.com/interception и там написано:
>The Interception API provides a simple interface of communication with kernel-mode components, and those components are powerful. They intercept data in a early stage, before it reaches the core of OS input processing.
Как я понял, он на более низком уровне эмулирует сигналы для ос, что по идее может быть сравнимо с ручной обработкой сигнала. Но хз, так ли это. Вчера всю ночь пытался на нем что-то написать, но документация сыроватая, кроме рабочих примеров написать что-то свое не вышло. Не могу разобраться, как на его апи можно имитировать зацикливание нажатие клавиши.
Работал с кодом из примера https://pastebin.com/WjjhERiS
Вот, как я его понимаю:
в цикле while мы блочим проверку условия строчкой
>device = interception_wait(context)
, пока по заданным фильтрам не придет нужное состояние
>INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP
Допустим, я нажимаю кнопку, срабатывает KEY_DOWN, функция interception_receive что-то там возвращает > 0, после чего оказываемся в теле цикла, где устанавливаем нужную клавишу и посылаем ее драйверу. Перед отправкой у клавиши всегда состояниеDOWN или UP, что по идее должно триггерить функцию interception_receive автоматически, зацикливая, но этого не происходит. А так же не понятно, что делают остальные фильтры
INTERCEPTION_FILTER_KEY_NONE,
INTERCEPTION_FILTER_KEY_ALL,
INTERCEPTION_FILTER_KEY_E0,
INTERCEPTION_FILTER_KEY_E1,
INTERCEPTION_FILTER_KEY_TERMSRV_SET_LED,
INTERCEPTION_FILTER_KEY_TERMSRV_SHADOW,
INTERCEPTION_FILTER_KEY_TERMSRV_VKPACKET (это все есть в хидере interception.h https://pastebin.com/NN4Bdefj)
>keybd_event
Я встречал его, но было написано, типа: используйте вместо него sendinput, мол он уже не работает. Твой способ для меня тоже не совсем понятный, надо пробовать.
Тоже советовали (stm32 и USB HID), что имелось ввиду под usb hid мне тот анон так и не ответил, программатор? А потом я подумал: есть ли смысл тратить на все это по 500рублей, чтобы попердеть вместе с ней, вероятно, не получить никакого результата и отправить ее на полку? К тому же, там столько всяких kitов, хер поймешь что нужно, а потом, еще эти проводки нужны, а может еще что нужно, о чем я даже не могу представить?
Да мы с тобой в разных плоскостях. Ты сильно всё преувеличиваешь, всё гораздо проще, ты пойми сам принцип.(я не шарю в ваших крестах, но примерно понимаю).
1 Послать сообщение из одной программы в другую - это гемор, это взлом и все вытекающие. Это можно сделать только посредством hook. Это единственная задокументированная возможность винды, других нет. Нет никаких драйверов, всё это спокойно делается самой виндой(но сработает антивирус).
И ещё есть второй способ обхода который я написал.
Может показаться, что я ною и не хочу решать свою проблему... Но я, от слова совсем, не хотел бы иметь дело с ассемблером... Вот, вообще.
ХУЛЕ НАПИСАНО ТО БЛЯТЬ!! НА ЗАБОРЕ ТОЖЕ НАПИСАНО.
>>keybd_event
Просто эмулирует событие клавиатуры. Конечно мелкомягким нахуй чтобы была такая возможность. А ты пробуй, у тебя же задача.
>Нет никаких драйверов
Ну, допустим, в какой-то момент я хотел собрать цепь таймера на микроконтроллере NE555, который запускал бы реле, а та в свою очередь замыкала/размыкала контакты кнопки, к которой бы я просто подпаялся. Сигнал бы поступал в ос сразу после драйвера клавиатуры и все бы работало, я уверен, только, если в том античите стоит какая-то проверка на интервалы нажатия кнопки, то мб и это обошла бы игра, но можно ведь попытаться как-то сделать эти интервалы случайными, чтобы имитировать ручное нажатие. Вот, поэтому я думал, что тот драйвер он просто перехватывает сигналы от драйвера клавиатуры (до обработки самой ос) и с помощью его api можно все что угодно сымитировать на "аппаратном" уровне, а ОС ничего не остается, как принять эти все сигналы и посчитать их ручным вводом.
>но сработает антивирус
Ну, ок, это проблема? Может его выключить/удалить на время? Я просто не понимаю что сложнее: обойти антивирус или написать хук.
Ты вот в этом месте заморочился. Их игра просто принимает сообщения от стндартного драйвера клавиатуры. А не работает у тебя, потому что меняется дескриптор процесса или тераяется фокус клавиатуры, в игре же много чего происходит, и если ты сам не тыкнул, то всё будет происходить само-сабой, всё будет само переключаться, как предусмотренно разрабами.
А вот чтобы "ткнуть из своей программы" нужно использовать хук, тогда гемор и антивирус. Или второй вариант: ты сам ткнёшь и программа всё доделает.
Тут главный вопрос: пользователь ткнёт или программа.
И приложение конечно не будет обрабатывать это событие если фокус клавиатуры на нём не установлен.
А sendinput отправляет сообщение. Но чтобы отправить должен же быть адрес, логично?
У вас системное программирование, и у нас сис. программирование.
Тебе же это надо? Ну я рассказываю что и как. Можешь поссать на своих англоязычных друзей от моего имени.
не деаноньте плиз, я с хорошими намерениями
то ли ещё будет
Решая задачи ты будешь пользоваться инструментами, асм один из них, не хочешь, найди того кто захочет
Окно модальным должно быть в контексте всей ОС? Что-то я не могу найти инфы о том, как это можно сделать. Везде пишут только о том, как сделать дочернее окно модальным в контексте приложения.
Тогда зависит от имплементации получается, правильно? Попробуй альтернативные stdio
Да я ничего против не имею, просто я не готов вот так взять и начать изучать один из сложнейших яп для какой-то своей хуйни. На это явно уйдет дохера времени, которого нет + явно не достаточно просто понять синтаксис языка, нужно понимать еще архитектуру процессора (наворачивать 1к страниц таненбаума не хочу), под который ты пишешь и наверняка еще дохуище подводных. Моя жопа к такому еще не готова. Я ж, блядь, молодой и шутливый еще...
А вообще, интересно. В чем преимущество этого языка? Тот код, который ты кидал, он как-то связан с чат-ботом в POE? И как так получается, что при использовании С/С++ потребовалось бы ебаться с хуками, вылавливать адреса функций и т.д. А ты взял ASM и написал код в длину высоты экрана и у тебя все работает?
>>Попробуй альтернативные stdio
А проще никак? Ну в духе передать какой-нить дополнительный аргумент fwrite() или fprintf()?
Для долбоёбов, которые не осиливают сами - придумали network endianness. htons()/htonl() из netinet/in.h, для тех кто даже куколдугл не осилил.
Ну и при чтении - ntohs/ntohl.
Так мне тоже надо ебаться с хуками. Ты меня не понял до сих пор, есть два стула:
1 правильный с хуками и ебатьнёй, от которого я отказался
2 кривой с модальным окном и keybd_event, который я выбрал. Там на видосе просто не видно окна программы(fraps не захватывает, надо было сразу указать).
Или просто DeskPins заюзай, главное чтобы окно программы было поверх, чтобы можно было тупо курсор навести на это окно во время удержания хоткея. Потому что фокус клавиатуры у тебя останется в игре, а твоя прога примет GetAsyncKeyState и начнёт выполняться, то есть хуячить keybd_event'ы.И всё будет автокликаться.
Да я сам деревянный, просто беру что надо и использую, не замарачиваюсь.
Да я вот, сейчас пытаюсь написать на winapi твой 2 способ, пока не выходит. Ты про модульное окно так и не ответил >>66950 И еще не совсем понятен этот момент:
>чтобы можно было тупо курсор навести на это окно во время удержания хоткея
Т.е. нажимать на лкм для захвата окна не надо? Достаточно только навести? Звучит парадоксально.
Никак. Тебе ведь поDWORDовый реверс нужен. Можно сетевой хедер взять, но не знаю, как htonl/ntohl в плане инлайнов. По-хорошему, если на целевой архитектуре endianness совпадает с сетевой, то "вызовы" htonl/ntohl должны опускаться при конпеляции, то есть безопасность бесплатна. Можно макросами условную компиляции сделать, чтоб одним fwrite/fread все делалось в последнем случае. Хотя, если писать/читать неглядя, а дрочить массив, то цикл сам опустится.
>Звучит парадоксально.
Похуй, главное работает.
Да, зажимаешь хоткей, твоя прога как бы на паузе, потом просто наводишь курсор, она как бы снимается с паузы, принимает GetAsyncKeyState и начинает исполнять keybd_event'ы которые тебе надо. НО фокус клавиатуры то остался в игре, поэтому твоя игра будет принимать эти keybd_event'ы.
Ясно, но у меня так не захватывает фокус, нужно нажимать, а после нажатия фокус сбивается. Пробовал пока в блокноте. Но я не делал еще никакое окно модальным, ибо ты уже 3 раз не можешь про него ответить. Я могу сделать это окно модальным только в контексте приложения.
>ибо ты уже 3 раз не можешь про него ответить.
Ну просто указываешь в ресурсах DS_SYSMODAL и всё, никаких сложностей у меня не было.
Не должен фокус сбиваться, этот кривой способ должен везде работать. Может надо код писать в оконной процедуре.. из за этого может теряется фокус хз.
Щас с deskpins попробую.
>DS_SYSMODAL
Вообще, в msdn написано
>This style is obsolete and is included for compatibility with 16-bit versions of Windows. If you specify this style, the system creates the dialog box with the WS_EX_TOPMOST style. This style does not prevent the user from accessing other windows on the desktop.
У тебя какая ос? 16 битные... Это что? Это по моему даже не ХР. Это 98 нахуй...
А за что забанит-то? За то, что кнопку зажал в игре?
Короче.. используй deskpins. Щас проверил, закоментил DS_SYSMODAL, работает.
Я не буду тут разбираться в тонкостях, ты просил способ обойти хуйню с sendinput, я тебе сказал как это сделал, прогу сам собирай. Главное пойми основной принцип:
1 Запускаешь свою прогу, закрепляешь её deskpins'ом
2 Кликаешь в то место куда тебе надо(устанавливаешь фокус клавиатуры)
3 Зажимаешь хоткей который указал в GetAsyncKeyState
4 При зажатом хоткее наводишь курсор на окно своей програмы
Она как бы снимается с паузы и начинает хуячить keybd_event'ы, а фокус клавы остался там, и там где он остался, то и будет принимать эти keybd_event'ы.
Как сделаешь, отпишись. :)
1920x1080, 0:40
Хз, у меня не получается. Вроде, все правильно делаю. Фокус при наведении не захватывается, нужно нажимать мышкой. После захвата фокуса в консоль выводится инфа о том, что хоткей (стрелка вверх) была нажата, как отрабатывают keybd_eventы не известно (пытаюсь сымитировать нажатие и отпускание клавиши Z).
Код: https://pastebin.com/8gHq99fH
Попробую завтра семерку накатить на виртуалку и там проверить.
Кстати, попробовал горячую клавишу тоже на Z заменить, keybd_event с этой кнопкой зацикливает хендлер, значит keybd_eventы работают. Проблема с этим фокусом.
А ты мой код можешь скомпилить и у себя запустить? Там надо пролинковать только -lgdi32. Или я могу скинуть свой exeшник.
Да я похоже понял. у меня окно делается DialogBoxParam. И GetAsyncKeyState c keybd_event внутри оконной процедуры.
>libstdc++-6.dll не найден
Да впизду(или завтра уже). Делай через DialogBoxParam, будет работать.
Анчоусы, добрый вечер. Хочу вкатиться в C++(опыт погромирования есть), но вот задумался. Может сперва с C начать? Или с C++ сразу. Как вы считаете?
А почему не СИ сперва? В чём отличия в назначениях между C и ++? Разные цели использования?
> А почему не СИ сперва?
Потому что тебя троллят. Кресты на порядок сложнее, запутаннее, а предпочтительный стиль программирования на крестах меняется с каждым стандартом. Но тем не менее их все равно придется выучить. Потом.
Завтра попробую. Вот, если что, все dll с которыми приложение взаимодействует. Если что, думаю, могу тупо все из списка в один архив с exeшником засунуть и залить на хостинг.
Начни с книжки по языку си от их авторов, прочитай ее полностью, пока не поймешь каждое слово. Там база баз. Если типы данных и массивы покажутся примитивными, то веселье может начаться на структурах, указателях. Так же есть полно всяких деректив define, pragma и тд обязательных к ознакомлению. После этого всего уже можно изучать плюсы, начиная с ооп, std библиотека, потом шаблоны, stl библиотека и тд. Там уже сам поймешь куда лезть, а куда нет.
Спасибо большое, понял. Я так понял нужно искать книгу последней редакции от Дэниса Ритча?
>Дэниса Ритча
Да
>последней редакции
Не обязательно. Бери, какую найдешь, по последнему стандарту в си (99).
Да эти дауны сишники тебя тролят, плюсы это другой язык. Вон тетка поясняет что надо сразу плюсы учить.
https://www.youtube.com/watch?v=YnWhqhNdYyk
Хотя, я сейчас посмотрел, они C11, вроде как, и не выпускали. А там многопоточность, которую ты в любом случае затронешь, когда плюсы будешь изучать. Так что бери любую редакцию или поновее, какую найдешь.
>1 Послать сообщение из одной программы в другую - это гемор, это взлом и все вытекающие. Это можно сделать только посредством hook
П Р И Д У Р О К
SendNotifyMessage()
Это кроссплатформенный ассемблер, вась.
А трупстрауса++ - это ассемблер, в который зачем-то добавили унитаз, кухонную раковину, несвежий труп страуса и миниган для стрельбы по ногам и прочим конечностям. Ещё можно сконпелировать пушку boostАК-630, если минигана нетостаточно
>писать хуйню для взаимодействия с msvcp приложениями на плюсовом gcc, у которого свои костыли вместо стандартной либы
Месье знает толк.
Алсо, особенно смищно, учитывая что плюсов там и нет. Такой-то PIERDOLIENG ради использования cout вместо printf.
Сап, няши, такой вопрос - в шиндовс (win7) x64 процесс может загружать x86 библиотеку с ресурсами (иконки)?
Тут такое дело - мигрирую 32 битной на 64 битную систему, захотел себе и тотал коммандер 64 битный, но вот старый у меня тщательно настроен и мною кастомирзирован, в частности я когда-то нарисовал+надергал иконки и захерачил их в библиотеку в VS6.
Теперь я давно не прогаю, никаких студий у меня не стоит и я подумал пиздец, придется либо просить кого-то пересобирать библиотеку, либо редактировать каким-нибудь редактором ресурсов.
Но с удивлением обнаружил, что эта библиотека WCMICONS.DLL в 64-битном тотале осталась 32-битной. Это законно вообще?
Если там кода нет - можно хоть PowerPC или Alpha библиотеку от NT4 подсунуть, приложению похуй.
Да там кода нет, там одна секция с ресурсами. Я тоже так же подумал, но закралось сомнение, что шиндовс может зарубить это дело. Спасибо, лучей добра.
Спецом поискал ISOшник PowerPCшной шенды и проверил на 10 x64.
Вдогон: отклеился пик самого окна проги с иконкой из набора NT4.
>DialogBoxParam(hInstance, MAKEINTRESOURCE(????), NULL, (DLGPROC)DialogProc, 0);
GetlastError() говорит о коде 1812, который, как я понял, как раз связан с этим аргументом. Я туда пробовал в цикле передавать числа от 0 до дохуя, пока функция не вернет > 0, но один хер ничего не вышло.
Все, разобрался.
Вот весь проект вместе с исполняемым файлом и dll библиотеками:
https://mega.nz/#!dQNgmISS!LvFJT7ff-hQHDJhAaA4uk9virqz1Q2hRkU8xqshOVmI
Если не сложно, попробуй у себя запусти или хотя бы код глянь. Пробовал так же и без DS_SYSMODAL (с diskpins) - тоже самое.
int indicator = 2;
int proc (void)
{
indicator = indicator + 1;
return 0;
}
int main()
{
printf("%d", indicator);
proc();
printf("%d", indicator);
}
почему данный говнокод выдает 23? ведь, если не пиздят книги, впроцедуру копируются значения глобальных переменных а сами они не изменяются.
Потому что ты перевод строки \n не сделал и тебе 2 результата в одну строчку записало.
это законно вообще?
Поверхностно глянул, думаю вот тут проблема:
case WM_COMMAND:
if (GetAsyncKeyState(VK_SPACE)) {
Тут у тебя прога ждёт сообщение WM_COMMAND. Не надо завязывать GetAsyncKeyState на WM_COMMAND, надо чтобы GetAsyncKeyState просто выполнялась с параметром хоткея. У меня на скрине она просто выполняется без WM_COMMAND, хотя тоже можно завязать на WM_COMMAND(77h-код клавиши).
>вынести GetAsyncKeyState из switch
Наверно да, попробуй, я хз как это сделать. Надо чтобы она самостоятельно проверяла клавишу, без сообщений.
Лол, вроде, сработало. Надо в игре попробовать. Алсо, я правильно понимаю, что это работает только с удержанием клавиши? А если нужна определенная периодичность, то надо свои костыли для обработки keybd_event писать?
Я пишу так
srand(time(NULL));
double z;
for (int i=0;i< 1000000; i++){
int k = rand()%60;
int j = rand()%60;
if (abs(k-j) < 15)
z++;
}
prinft("%f", z/1000000);
И эта программа выдает неверные результаты.
А такой же код на пистоне с использованием randint(0, 60) выдает верные результаты. Почему?
>то надо свои костыли для обработки keybd_event писать?
Ага.. я беру текст из текcтового файла и подставляю в keybd_event
я там немного перепутал, sendinput тоже должен работать по идее
С игрой не выходит) Приходится вручную отпускать кнопку и нажимать снова, чтобы keybd_event/sendinput отработали 1 раз. Но это я просто посылаю сотни событий за раз. Надо будет еще как-то обработать эти нажатия, ограничив число вызовов.
Код просто для примера. Так то там нет такой ошибки.
Вообще результат отличается на сотые, хотя должен в худшем случае на десятитысячные.
Тебе надо сделать условие - если GetAsyncKeyState возвращает что хоткей не нажат, то тупо выход из процедуры.
i пробегает зачения от 0x1111 до 0x10000
Интересно а как распознователи всякие пишут? Я погромист-ньюфаня и крайне с трудом представляю как это. Вводят чтоли определённый диапазон геометрический на соответсвие какой либо области пределам формы? Цвет детектят по попаданию пикселей в тот или иной цветойо диапазон?
Ну допустим программа отличает где кошка где собака. Очевидно что у собаки более длинный нос чем кошки, меньше глаза чем у кошки и есть программа которая сверяет размеры + старается прогнать это всё под какой-то готовый шаблон похожей на кошчий нос формы. Сложно на словах это объяснять, ну я думаю вы понели.
Чтобы в этом разобраться, тебе надо разобраться в алгоритмах, которые для этого используются. Бери какую-то книжку по алгоритмам распознавания и читай.
нейрон_очки же.
конечно! если ты новичек, это будет еще и интересной задачкой на программирование
делать примерно так: пишешь свою-функцию обертку my_scanf (или как ты ее назовешь), в ней парсишь первый параметр, как встретишь свою спецификацию формата, разбираешь ее по полям структуры, подготавливаешь новую форматную строку и передаешь дальше в стандартный scanf
my_scanf(char *s, ???)
А что идет вторым параметром? Я хочу чтобы она не только со struct работала, а как scanf(), с примитивами тоже.
Алсо, а без определения своей ф-ции никак? Ну, типо питоновский overriding.
а в эту хуйню встроен компилятор или это как просто редактор кода и компилятор отдельно нужно качать?
>???
Название твоей структуры
>overriding
Можешь её назвать scanf и она заменит обычный сканф, но зачем?
>>Название твоей структуры
А мне надо чтобы она и с интами и чарами работала, вотъ!
>>Можешь её назвать scanf и она заменит обычный сканф
Разве я не получу ошибку?
>она и с
Тогда пусть принимает указатель на войд и уже сама как-то решает, что это за указатель. Сканф парсит для этого форматную строчку.
>Разве я не получу ошибку?
Проверь. Но опять же, зачем так делать?.
>>Тогда пусть принимает указатель на войд и уже сама как-то решает, что это за указатель. Сканф парсит для этого форматную строчку.
Можно поподробнее?
>А мне надо чтобы она и с интами и чарами работала, вотъ
are you dolboeb?
https://pastebin.com/wrytAs4b
Я гоняю сейчас с ним тестовый код. Скомпилировал и слинковал код с отсутствующей реализацией функции - так оно сгенерировало финальный бинарь, а несуществующую функцию установило как будто она размещена на 0x0, лол. Ворнинг (не ошибку, а именно блять ворнинг) оно, конечно, напечатало, но из-за подобного долбоебизма пришлось добавить костыль в makefile. Теперь думаю - продолжать работать с этим говном или уж лучше юзать бесплатный IAR (при этом мне нужно будет его запускать на линуксе под вайном).
Читаю их списки рассылки - чувстсво, будто компилятор пишут какие-то отбитые индусы.
Анон, это все мелочи, говорю же, в самом коде нет таких ошибок. Результат то почти верный, отличается на сотые, тогда как в пистоне на десятитысячные.
Сама задача о встрече к слову
Есть 2 человека. Они договариваются встретиться в промежуток времени от часа до двух. После прихода они ждут не более 15 минут. Найдите шанс их встречи.
И в цикле должно быть <=15
нет. просто там если всё без разбора груизть 6гб будет загружаться. алсо я вот прочитал описание всех этих пакетов и не увидел там ни одного упоминания C только C++ и шарп.
>А что идет вторым параметром?
функции с переменным числом параметров умеешь писать? это и будет
>Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
из оп поста.
А на чём погромировать? На досе? Если ты о unix то иди со своей сектой в /s/ и там агитируй. Я хочу учить язык программирования, а не сосноль пердоли.
Да, обычная. Но надо провести моделирование, что я и пытаюсь сделать. На питоне все сходится, на си нет.
когда я в прцоессе обучения увижу что мне НУЖНА ПЕРДОЛЯ ИНАЧЕ НИКАК, вот тогда и поговорим.
>вендосектант
Вскукарек со стороны столлманопараши. Кроме игрушек, на линупсе нет еще дохуя полезного софта, например, для записи и редактирования аудио и написания музыки. На венде куча вст плагинов на любой вкус и цвет, а на линупсе хуй да нихуя, хотя битвиг и рипер портировали, но какой в них смысл без плагинов? Правда, на маке дела получше, но для этого нужно быть геем. Остальные юниксы начиная со бзди даже рассматривать всерьез смешно.
Да не спорь ты сним, это же пердоля. Ты ему аргументы, он тебя гавном поливает. У них секта такая, самые агрессивные и неадекватные в айти сторонники пердоли. Просто игнорируй.
Шиз, какая музыка, мы в треде языка си, программировать на котором в юникс системе не в пример удобнее.
>программировать на котором в юникс системе не в пример удобнее.
Может ему нужно программировать на Си и параллельно писать музыку, откуда ты знаешь? Современные ОС многозадачные, если что.
На самом деле ты зря жс недооцениваешь сам так делал, сейчас JavаScript - полноценный язык программирования, и на нем есть интересные вещи.
Ох какие мелочные претензии-то стали. Давно не следил, раньше хоть предъявляли, что игр нет, фотошопа. А сейчас только плагинов для аудиопердоль не хватает? Может и правда пора перекатываться.
>А сейчас только плагинов для аудиопердоль не хватает?
А че ты смеешься? Твой любимый репчик и симфо джаз павер металкор в аудиопердолях записывается и сводится целиком, времена оналога давно позади.
А потом хранятся и передаются мне тысячей линуксов, как оба этих факта вообще меня касаются?
Тебя -- никак, он касается людей, которым нужны аудиопердоли, а на линупсе их нет.
Так эти люди и есть аудиопердоли! Желаю им всего наилучшего, кстати, но в отличие от пользователей фотошопа и тем более игорь, их число просто ничтожно. Поэтому я и сказал, что претензии стали мелочными.
> Desktop Development with C++
Вот это. Но тебе правильно сказали, запасись местом на винте, там далеко не гигабайт.
>>68310
> Визуалка не предназначена для си
Сохраняешь файл с расширением .c - будет Си. Или можно еще в настройках проекта насильно компилятору язык задать (/Tc).
>>68479
> программировать на котором в юникс системе не в пример удобнее
Особенно удобно пердолиться в gdb, когда source-level отладка не помогает, при том, что на винде есть качественные графические отладчики машинного кода. Или искать файлы find-ом, при том, что в винде есть Everything. Или придумывать, как же сделать программу с GUI, и чтобы не выглядело как Tk. Или изобретать свой формат для хранения настроек, снова. Или собирать чужие некомпилирующиеся утилиты с дохулиардом зависимостей, потому что скачать уже собранный бинарник нельзя. Вернее, скачать-то можно, но у тебя либц не той версии, и вообще иди нахуй.
Ну я пользователь аудиопердоль, например, что мешает мне полностью перейти на линупс. Если бы не оно, венду можно было бы держать только для йобы и на черный день (хотя на черный день достаточно ВМ).
Всё так. У тебя написано, что строку ввести "upto 100 character", но кто останавливает от введения более длинной? Вот тебе уже и overflow твоего массива. 100 уже будет много, потому что нужно место для '\0'
Потому что вижуалка.
Там же написано, что нужно использовать _CRT_SECURE_NO_WARNINGS. Я уже не помню, как это делается, загугли сам.
о спасибо, анон. тогда я включу назад вонинг тот. да я просто нашёл тут один самоучитель ебашу по нему, но он видимо староватый это я уже понял т.к. там новую строку обозначают 'n', а не '\n'.
Строки читай так: scanf("%[^\n]", s), вроде даже так можно scanf("%100[^\n]", s) с прописанным ограничением.
Спасибо, огромное, анчоус.
Правильно, потому что эта функция безопасна и проверяет, не затронешь ли ты чужую память во время ее выполнения.
А обычная версия может переписать чужой фрагмент памяти и порушить тебе все.
Ничего себе. Не знал, что язык такие возможности имеет, спасибо огромное возьму это на заметку.
а если не ставить ограничение у строки в 100? просто не ставить скобки, а тупо задать перменную. то будет анлимит?
Это, вроде, непереносимый код.
То есть только msvc такое скомпилит, а gcc будет работать с обычным scanf, насколько я знаю - у самого не получилось скомпилить прогу с VS2015 с помощью gcc.
>>68800
Почитай про объявление массивов.
Если ты уберешь квадратные скобки, то это будет обычная переменная. Если поставишь звёздочку - указатель, но нужно будет вручную выделять память под необходимое количество элементов.
я уже загуглил эту тему на одном форуме, да обычно нужно юзать scanf, а scanf_s для безопасности в vs.
анчоус, молю, а как сделать чтобы он пробелы моего импута учитывал, а не обрывал на них?
Тут уже сорян, я вообще хуесос из соседнего треда и решил бы эту проблему с помощью std::cout << std::noskipws.
Да, я больше по плюсам, но на си тред тоже подписан, полезно.
> устаревшие небезопасные функции
Только по мнению Microsoft, которая идет с этим мнением и со своим _s-говном в известном направлении.
>винда
>как добавить пробел
>решил проблему плюсовым ай о
толстота пиздец. Хотя прямо под уровень треда.лайк если учишся в школе 21 и учишся писать код!!!
алсо загуглил вчера его биографию, что-то грустно стало. мужик придумал C много в современных кудахтерах сделано благодаря ему, а он умер в своём доме в одиночестве от рака простаты и даже точную дату смерти не знают т.к. не сразу его обнаружили.
да не он до последнего был у дел. работал там, его коллека же и обнаружил что он умер когда он долго не выходил на связь. жил там в доме, до последних дней жизни он занимался исследованиями в области кудахтеров. ну жалко, я то думал он ещё живой, обычно авторы предыдущих языков которые я учил все живые.
>интересные вещи
Пишешь кароч такой const ya = {sosu: 'hui'}, каким-то хуем меняешь свойство sosu, полагая что это невозможно, на выходе получаешь не то, что ожидал. В итоге не можешь понять где и что могло наебнуться в коде.
Джава срипты, питоны, хуйтоны и прочая хуета для детей и веб-клоунов высерающих сайты под ключ это всё несерьёзно. Это всё языки для тех кто не хотели работать на дно работах и ВАШЛИ В АЙТИ лишь бы бабки были. Настоящие тру зароты дрочат Сишечку и крестики.
const не существует, тебя обмынывали
А еще, а еще... Берешь такой строку, нахуй, и передаешь в аргумент, ожидающий интегер))))000))))00)0
Что за школа 21? Это что локальный мемос такой?
>Визуалка не предназначена для си.
Ну да. Нахуй Си вообще нужен? На нём пишут только под микроконтроллеры, а там своё IDE есть фирменное. Студия же предназначена для нормальных программ под ПК, а тут Си не всрался совершенно, инвалидный огрызок.
Ты бы хоть потрудился прочесть пост ниже, что я пишу на плюсах, а сюда иногда просто заглядываю.
Но покукарекать же важнее.
Что ты скрытый сишник? Вроде бы на крестах пишешь, чего ещё нужно, но нет нужно заглянуть в си... Не скрывай свои желания
Двумерный массив char размером NxM, где N - диапазон по X, деленный на шаг, а M - та же хуйня по Y. Идешь от x0 до xn, но если модуль производной больше 1, то не инкрементишь, а увеличиваешь ровно настолько, чтоб инкреметнулся y. И, собсно, все y, попадающие в вертикальный диапазон, рисуешь в массив (предварительно заполненный пробелами). А потом этот массив печатаешь.
Искать какую-то графическую (или гуй с зачаточной графикой) библиотеку. SDL или еще что. Если подойдет что программа будет генерировать svg файл с графиком (а не рисовать его на мониторе), то после беглого изучения описания стандарта (svg) с вики и расмотреных нескольких примеров простых свг можно писать график в свг. Там ничего особо сложного нет, должно хватить часа двух. А если еще найжешь свг с графикомто там вообще все просто - только свои числа подставить.
ну мне в столбик нравится. я имел в виду более такие фундментальные вещи. мало ли какие-то другие методы есть.
Ну если сделать так что а всегда больше б (тоесть если б больше а то менять их местами) то можно убрать один printf и оставить проверку только на равенство. Или ввести функции min и max от двух аргументов, тогда тоже можно убрать один printf опставить проверку на равенство и если не равны то там в будет что то типа printf("......", min(a,b), max(a,b));
а точно спасибо, как это я с ретурном то проебался. точно так программа гораздо быстрее будет завршаться. спасибо большое, анчоус.
А можешь подсказать ещё одну вещь.
Вот нужна программа которая бы принимала
x список чисел
y список чисел
который введёт пользователь. Суть в том что пользователь может ввести просто 3 числа, а может 10 ввести. Как это реализовать?
я бы сгенерил массив данных для графика в проге, а потом их отдал бы в gnuplot
Рисовать тупо или именно графики строить? Хотелось бы готовый модуль с графиками в идеале. Ну или придётся с лицом лягушки пилить график самостоятельно
Так мона:
int a, b, x;
printf("Enter zaloopa");
scanf("%d%d", &a, &b);
x=(a>b) ? a:b;//вроде можно без х, но не во всех стандартах
if(a!=b)printf("zaloopa is %d, mask is %d", x, (a+b)-x);
else printf("pizda");
А в чем проблема? Передал координаты ф-ции и получил график. Можешь на гитхабе поискать стороннюю либу если такое не устраивает. Ну или пиздуй в какой-нибуть mathematica(?)/PariGP(?)
>Передал координаты ф-ции и получил график.
Ну если так то всё шикарно.
А как напечатать содержимое односвязного списка?
Обратиться к полю, в котором хранишь данные. Потом вспомогательный указатель на следующий элемент подвинуть в цикле while (p->next != NULL).
Ребенок-илитарий, написавший 0 строчек коммерческого кода, плиз, не нужно защищать свой скудный ум такой риторикой. Лестница элифов без скобок ВСЕГДА получается нечитаемой
Прости что напомнил о твоей несостоятельности, хуйня из школы 21.
А теперь тоже самое без операторов сравнения сделай.
Говно, ты? Я тебя узнал. Когда допишешь свой язык программирования? Я устал ждать новое видево!
https://www.youtube.com/watch?v=7VNXP8Njotk&list=PLlJ2XpWJ7m_SyyWc12KXOmhJdNURgParL&index=12
шизло, ты? паренек делает учебный проект по приколу заливая видосики на ютуб, че тебе не нравится? Ах да, ты же долбоеб пишешь простынки иф стейтментов без скобок друг под кругом, прости что спросил.
тебя жс макаки обоссали что ли, или откуда такая нелюбовь к популярному инструменту?
>эти невнятные пуки ребенка-студннтишки не написавшего ни одной строчки коммерческого кода
Не рвись так сильно, илитарий. Сомневаюсь что ты по теме треда вообще хоть что-то кроме хеловорлд левела ответить сможешь.
>эти невнятные пуки ребенка-студннтишки не написавшего ни одной строчки коммерческого кода
>Не рвись так сильно, илитарий. Сомневаюсь что ты по теме треда вообще хоть что-то кроме хеловорлд левела ответить сможешь.
#ifndef _MSC_VER && !__INTEL_COMPILER && !__STDC_WANT_LIBC_EXT1__
// тут у нас типа костыль
int scanf_s() {
...
}
#endif
Я не жсблядь, но про if без скобок в одну строчку он правильно бомбанул.
Никто уже не редактирует код в 80x40 терминалах, и твои лесенки в хуй никому не упали, они просто нечитабельны в нормальной IDE.
Отбились от своего стада, видимо.
Еще один жопоглазик, лол. Ты сам-то веришь в хуйню, которую несешь? Вот смотри, тупа логика и нихуя более: когда ты пишешь в строчку, твой ретурн/принтф или что ты там обычно на своем жскале высираешь, просто сливаются с условием. Понимаешь? Т.н. "лесенка" позволяет тебе увидеть разницу в слоях. Так вот, когда эта лесенка одна, тебе на хуй не нужны никакие скобки, они тупо не играют никакой роли. А теперь съебал, шизоид ебаный. Подрочи на свой читабельный тс, лол.
Я те больше скажу братиш, тут жсблядей ваще нет. Просто ребенку НЕПРИЯТНО, и в жизни он стремных вещей видел настолько мало, что считает жс чем-то плохим.
Ты чё несёшь дегенерат? Ещё раз тебе говорю, по тому что ты пишешь уже видно что опыта у тебя просто ноль. Ниче ещё годик повкатываешься в школе 21, может вкатишься на галеру писать на жсе который ты так ненавидишь (причина наверное даже самому тебе не понятна)
>Я не жсблядь, но про if без скобок в одну строчку он правильно бомбанул.
>Никто уже не редактирует код в 80x40 терминалах, и твои лесенки в хуй никому не упали, они просто нечитабельны в нормальной IDE.
>Я те больше скажу братиш, тут жсблядей ваще нет. Просто ребенку НЕПРИЯТНО, и в жизни он стремных вещей видел настолько мало, что считает жс чем-то плохим.
>Ты чё несёшь дегенерат? Ещё раз тебе говорю, по тому что ты пишешь уже видно что опыта у тебя просто ноль. Ниче ещё годик повкатываешься в школе 21, может вкатишься на галеру писать на жсе который ты так ненавидишь (причина наверное даже самому тебе не понятна)
>этот разрыв жопы долбоёба со сломанным детектором.
>мам симёны сматли мам
Тоже мне, блядь, притащил пруфы, лол. Ору с тебя - дауна. Алсо, скрины делать научись, говно позорное. И про лесенки свои иди затирай своим одноклассникам, за одно код стайлом похвастаетесь друг перед другом и подрочите на брудершафт, попивая смузи. Хррррртьфу!
Поэтому если вы примете правило 80 символов в строке, функции в 25 строк, плюс строгий код-гайл, вы только выиграете. Вот.
А ты, ебать, кто такой? Из какой параши залетел?
Иди в тред Паскаля, хомяк.
Что там сложного? Инфы про указатели полно. Вот односвязный список (LIFO): https://pastebin.com/mbmLj3ty
А можно создать список и сразу в нём инициализацию переменных сделать? а то у меня получается только создать их, а инициализацию нельзя. ну типа создать список с интеджерами уже известными.
Не понял твой вопрос. Ты когда память новому элементу выделяешь, тогда и "инициализируешь" его. Если тебе нужно его каким-то дефолтным значением после создания забить, то берешь и указываешь нужное. Но только нахуя это? Когда элемент добавляешь, тогда и выделяй память + значение нужное вбивай.
Ну щас объясню тебе. Подожди, пожалуйста, открою визуалку.
вот. у меня список я туда могу поместить какие-то переменные, но сразу им значения присовить не могу. не даёт. почему?
Про структуры почитай. Это не список. Список - это колбаса из элементов типа этой структуры, которые связаны между собой.
я так понимаю мне нужно прочитать самую первую книжку из оп поста от двух авторов?
Ты тролль? Я тогда вообще не понимаю, как ты до списков дошел. Инфы, повторю, дохуя. Не обязательно книжку, можно статьи по мере надобности читать. Но для тебя, похоже, лучше действительно книжку от корки до корки прочитать, если цель изучения стоит. А если написать список, то читаешь про структуры, указатели, функции.
Я слез с питона недавно и там списки очень просто делались,а здесь я охуеваю. Да, хочу выучить язык нормально.
понял. съебался уже отсюда читать книгу. там кстати ещё и перевод на русский есть вообще шикарно и упражнения это всё радует.
Вы видите копию треда, сохраненную 27 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.