Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633

Вывод информации в файл, Кириллица корректно не выводится

23.09.2022, 06:43. Показов 7551. Ответов 81
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Решил вывести информацию в файл по нажатии на кнопку "сохранить", но в файл отображается либо кракозябры, либо ничего, если текст на русском.
Вот код той части кода, которая должна выполнить задуманное:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
case uiButtons[0]:
{
    *(LPWORD)chBuf = (WORD)(128);
    int nNum = SendMessage(hEdit, EM_GETLINE, 0, (LPARAM)(LPTSTR)&chBuf);
    chBuf[nNum] = TEXT('\0');
    if (nNum)
    {
        TCHAR* NextToken = NULL;
        TCHAR* chTmp = _tcstok_s(chBuf, TEXT(" ,.;"), &NextToken);
        TCHAR sz[128];
        _stprintf_s(sz, 128, TEXT("%s"), TEXT("["));
                    
        for (size_t i = 0; (chTmp); ++i)
        {
            _tcscat_s(sz, 128, chTmp);
                    
            chTmp = _tcstok_s(NULL, TEXT(" ,.;"), &NextToken);
            if(chTmp)
                _tcscat_s(sz, 128, TEXT(""));
        }
        _tcscat_s(sz, 128, TEXT("]"));
                    /*_stprintf_s(sz, 128, TEXT("%s"), TEXT("["));
                    _tcscat_s(sz, 128, szFIO[0]);
                    _tcscat_s(sz, 128, szFIO[1]);
                    _tcscat_s(sz, 128, szFIO[2]);*/
                    
 
        int i;
        for (i = 0; i < 2; ++i)
        {
            if (SendMessage(hButtonSex[i], BM_GETCHECK, 0, 0L))
                break;
        }
                    
        _tcscat_s(sz, 128, TEXT("{"));
        if(i < 2)
            _tcscat_s(sz, 128, szSexNames[i]);
        _tcscat_s(sz, 128, TEXT("}"));
        for (i = 0; i < 4; ++i)
        {
            if (SendMessage(hButtonEduc[i], BM_GETCHECK, 0, 0L))
                break;
        }
        _tcscat_s(sz, 128, TEXT("{"));
        if(i < 4)
            _tcscat_s(sz, 128, szEducNames[i]);
        _tcscat_s(sz, 128, TEXT("}\0"));
                    
        FILE* hFout;
        errno_t IsError = _tfopen_s(&hFout,
                                    TEXT("D:\\EmployeeRecord.txt"),
                                    TEXT("a"));
        if (IsError != NULL)
        {
            MessageBox(NULL, TEXT("Can't open file"),
                       TEXT("Error"), MB_OK);
            return 0;
        }
        CHAR szDest[128];
 
        int iRes = 0;
        if(IsTextUnicode(sz, _tcslen(sz), &iRes))
            WideCharToMultiByte(CP_ACP, 0, sz, -1, 
                               (LPSTR)szDest, _tcslen(sz), NULL, NULL);
                                        
        if (hFout)
        {
            fputs(szDest, hFout);
            fclose(hFout);
        }
        _fcloseall();
    }
    return 0;
}

Если честно, то я иссяк и хоть это не так важно на данный момент - я про вывод информации в файл, но, думаю, что лишним подобные знания не будут. В чём мой косяк? По идее должно выводить без проблем. Считывая строку из элемента управления "edit" в каком формате ANSII или UNICODE она попадает в буфер?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2022, 06:43
Ответы с готовыми решениями:

Вывод информации - кириллица и латиница вместе
Бодрого дня, господа. До недавнего времени я был уверен, что gotoxy(х,у); задает абсолютные координаты, ни отчего не зависящие. Но,...

Вывод информации с файла на консоль. Не выводится информация с файлов
Написал прогу для вывода информации из файлов, но что-то пошло не так. Все скомпилировалось без ошибок, но когда я делаю выбор в...

Ввод вывод в файл и консоль.(Кириллица)
int main() { setlocale(LC_ALL, &quot;rus&quot;); ifstream a(&quot;qwe.txt&quot;); string x, y; getline(cin, x); //1- ввод из консоли в (x) ...

81
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
24.09.2022, 13:35  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Да нет, вы угадали с порядком переменных, но NextToken надо бы переименовать. Это если я сам правильно понял, как оно работает.
Если я назову эту переменную EmptyToken, так, видимо, будет правильнее. Нужно тупо проверить как она работает и всё. Если ввести Фамилия Имя Отчество, то когда функция входит в цикл эта переменная содержит Имя отчество, вторая итерация делает эту переменную Отчество, третья пустой и ещё один цикл крутит функция до выхода. Хз я не знаю зачем она. Можно сказать, что она содержит лексемы, возможно и цикл не нужен тогда...

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Плохо помню что такое кодировка ANSI, вроде бы это группа однобайтных кодировок, куда входят и ASCII, и 866, и 1251 и другие.
Да, что-то из этой оперы.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Видимо, я как-то криво скопипастил, поскольку ни во что адекватное оно не расшифровывается: [BD8CФ>C45CФ>C%ЧґD46Dt8CФ0}{A$KDHCT5}
Вы просили ввести символы я вывел посимвольно в шестнадцатеричном виде.

Предыдущее ваше "заклинание" я вообще не понял.
Тоже самое лишь функция для вывода использовалась другая.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А зачем? Старые ASCII-функции оставлены только для совместимости с доисторическими системами из прошлого тысячелетия.
Может и так, но как видно споры по поводу того в какой кодировке работать до сих пор не утихают и вызывают массу проблем. А ещё есть наследие DOS в виде окна командной строки. Так что всё актуально.)

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я не знаю что за книгу вы там читаете (в том смысле, что сам ее не читал), но в Си или С++ так не принято. И даже в winapi с их любовью к длинным именам, я такого не видел. Попробуйте поискать образцы кода, написанные разными людьми. Желательно более-менее свежие.
Более или менее свежие на английском, а я его не знаю на том уровне, что бы читать книги, как на родном. Если вы про макросы, то их можно в хедер файл засунуть и не париться. Ну а так да, слишком трудоёмко, согласен.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Зависит от того, что вам нужно прямо сейчас. Если просто знакомиться с winapi, то используйте то, что тамошние функции понимают.
А они и то и то понимают. Но вывод в файл так меня не напрягал, что-то я такого не помню. Короче говоря лучше сразу писать с типом wchar_t, всё равно Windows преобразует строки в unicode.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
24.09.2022, 14:31
Цитата Сообщение от Liss29 Посмотреть сообщение
А если IsWindowUnicode() использовать для уточнения, нет?
А если забудете? А если текст в юникоде придет с файла или еще откуда? Есть апи IsTextUnicode или как то так, но а) она не достоверная на 100%, особенно на небольших текстах; б) смысла нет.

Цитата Сообщение от Liss29 Посмотреть сообщение
вообще подключение заголовочного файла tchat.h это как раз и есть упрощение, нет?!
Объясните, зачем вам Анси функции, строки и так далее. Ну просто , вот для себя скажите, зачем они вам? Уже писал сто раз, в Рихтере был момент какой: тогда существовали вин98 и вин2к, параллельно, и программы писались для них обеих. Чтобы удобнее было, не бегать по коду и менять, то для 98 винды делалась анси версия, для 2000 - юникод. Зачем это сейчас?
0
 Аватар для COKPOWEHEU
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
24.09.2022, 17:22
Цитата Сообщение от Liss29 Посмотреть сообщение
Нужно тупо проверить как она работает и всё.
Насколько я понимаю, при первом вызове туда сохраняется ссылка на исходную строку, причем символы-разделители заменяются на что-то более единообразное. При последующих вызовах исходную строку передавать уже не надо, вся информация хранится в этой переменной. Ближайший к началу символ-разделитель заменяется на '\0' и возвращается из функции, а указатель сдвигается к следующему токену.
Так что это не EmptyString, а "внутреннее представление для strtok" - ну например, strtok_internal_str.
Цитата Сообщение от Liss29 Посмотреть сообщение
Можно сказать, что она содержит лексемы, возможно и цикл не нужен тогда...
Так ваша исходная строка точно так же содержит лексемы. Вы можете ковырять их руками, а можете скормить strtok'у и он вам их выдаст по одной.
Цитата Сообщение от Liss29 Посмотреть сообщение
Вы просили ввести символы я вывел посимвольно в шестнадцатеричном виде.
Было бы неплохо еще знать что же за символы это были. Например, строка Кодировка будет выглядеть так:
utf-8: D09AD0BED0B4D0B8D180D0BED0B2D0BAD0B0
utf-16: 1A043E043404380440043E0432043A043004
cp1251: CAEEE4E8F0EEE2EAE0
866: 8AAEA4A8E0AEA2AAA0
koi8-r: EBCFC4C9D2CFD7CBC1
Цитата Сообщение от Liss29 Посмотреть сообщение
Тоже самое лишь функция для вывода использовалась другая.
Там спецсимволов больше, чем кодов. Я не понимаю, что там вообще должно было вывестись.
Цитата Сообщение от Liss29 Посмотреть сообщение
Может и так, но как видно споры по поводу того в какой кодировке работать до сих пор не утихают и вызывают массу проблем. А ещё есть наследие DOS в виде окна командной строки. Так что всё актуально.)
Ну, виндовая консоль это тот еще ужас, летящий на крыльях ночи. Выводить в нее юникод еще возможно, но вот как вводить, я не знаю до сих пор.
Вот так вывод вроде работает:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  #include <stdio.h>
  #include <wchar.h>
  #include <locale.h>
  #ifdef WIN32
    #include <windows.h>
    #include "fcntl.h"
    __attribute__((constructor)) void coninit(){
      SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8);
      _setmode(_fileno(stdout), _O_U8TEXT);
      _setmode(_fileno(stdin), _O_U8TEXT);
    }
  #endif
 
  int main(){
    setlocale(LC_ALL, "");
    wprintf(L"x\u00B2+7x+4\n");
    return 0;
  }
Цитата Сообщение от Liss29 Посмотреть сообщение
Более или менее свежие на английском, а я его не знаю на том уровне, что бы читать книги, как на родном.
Я говорил не про книги, а про примеры кода. Надо найти какой-то относительно современный код, использующий winapi (хм, это может быть непросто...) и смотрите что они там используют. Какие функции, кодировки, стили и прочее.
Другой вопрос, зачем вы сами изучаете winapi? Если для того, чтобы понять как работает именно винда, это одно, но если для написания пользовательских программ - совсем другое. Там как раз winapi не особо-то и нужно, тем более что есть куча более удобных кроссплатформенных средств.
Цитата Сообщение от Liss29 Посмотреть сообщение
Короче говоря лучше сразу писать с типом wchar_t, всё равно Windows преобразует строки в unicode.
Боюсь, все не так просто окажется...
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
25.09.2022, 06:58  [ТС]
Цитата Сообщение от Morgot Посмотреть сообщение
Объясните, зачем вам Анси функции, строки и так далее. Ну просто , вот для себя скажите, зачем они вам?
Например, если писать программы для консоли Windows. Мне они особо не нужны, но существуют же два вида функций с окончанием SomeFuncA и SomeFuncW я, конечно, понимаю, что всё это для обратной совместимости и то, что этот шлейф тянется из прошлых версий ОС Windows. Пожалуй, отвечу так: так как я не понимаю досконально всего, что происходит в недрах ОС я делают как удобно мне сейчас т.е. на интуитивном уровне выбираю, а не из фактических знаний о кодировках и.т.д.

Цитата Сообщение от Morgot Посмотреть сообщение
Зачем это сейчас?
Я выше спрашивал, что всё же предпочесть сейчас, какой тип char или wcha_t? на что получил ответ: зависит от того что вам нужно в данный конкретный момент т.е., как я понял, ориентироваться на задачу и потребности. Если wchat_t - функции с окончанием W, иначе, если chat - функции с окончанием A.

Добавлено через 22 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Так что это не EmptyString, а "внутреннее представление для strtok" - ну например, strtok_internal_str.
И зачем она, по сути, всё выполняется, как и при вызове обычной strtok. Для безопасности, ну... не очевидно.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Было бы неплохо еще знать что же за символы это были. Например, строка Кодировка будет выглядеть так:
[Финогенов]{Мужчина}{Высшее} так выглядела строка.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Выводить в нее юникод еще возможно, но вот как вводить, я не знаю до сих пор.
В консоль UNICODE? я и не знал, что такое возможно, до сего момента, там же ASCII и ANSI рулят)

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
(хм, это может быть непросто...)
Сами ответили на сой вопрос) Это очень не просто, а ещё нужно в нём разобраться, там много всяких макросов и прочей шелухи.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Другой вопрос, зачем вы сами изучаете winapi? Если для того, чтобы понять как работает именно винда
Именно так. Да и к тому же серьёзное приложение всё равно требует знание многих вопросов, которые касаются winapi они даже в stdstl есть я уж не говорю про кроссплатформенные средства разработки, они что не на API ОС разрабатывались?!
Хотя с графикой там по легче будет, тут спору нет, я имею ввиду разработку GUI. Вообще, видимо, мне больше низкоуровневое программирование нравится, не знаю почем, возможно, потому что начинал, точнее пытался начать разбираться в вопросе программирования с Ассемблера.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
но если для написания пользовательских программ - совсем другое.
Серьёзно, если не брать кроссплатформенные средства, то возможно ли написать достаточно серьёзно приложение, например, для работы с файлами в ОС Windows, Переместить, копировать, переименовать выбранные файлы или всё, как-то пометить их, синхронизировать папки ну и.т.д. Просто для себя, ради тренировки, если всё пойдёт гладко в изучении api...

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Боюсь, все не так просто окажется...
Да, многие знания плодят печали)
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,285
25.09.2022, 07:01
Liss29, внутри программы на винде (для удобства работы со строками) все тексты храни/используй в кодировке utf16 (wchar_t, std::wstring, anyWinAPIfuncW)

а в файлы/txt/ini/json/xml/БД советую сохранять в utf8, так как это практически стандарт
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.09.2022, 08:49
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну, виндовая консоль это тот еще ужас, летящий на крыльях ночи. Выводить в нее юникод еще возможно, но вот как вводить, я не знаю до сих пор.
Не надо ничего придумывать и городить костыли с SetConsoleCP. Для ввода и вывода юникодных строк на консоль есть функции WriteConsoleW и ReadConsoleW. Они сразу заполняют буфер символами типа WCHAR.
0
 Аватар для COKPOWEHEU
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
25.09.2022, 09:21
Цитата Сообщение от Liss29 Посмотреть сообщение
И зачем она, по сути, всё выполняется, как и при вызове обычной strtok. Для безопасности, ну... не очевидно.
Я же писал: а вдруг у вас многопоточная программа, и оба потока захотят разложить разные строки на токены.
Цитата Сообщение от Liss29 Посмотреть сообщение
[Финогенов]{Мужчина}{Высшее} так выглядела строка.
Ни в одной из кодировок, которые я проверял, ничего похожего не было. Может, там какой-то свой внутренний формат?
Цитата Сообщение от Liss29 Посмотреть сообщение
Да и к тому же серьёзное приложение всё равно требует знание многих вопросов, которые касаются winapi
На самом деле именно winapi-специфики не так уж много и используется она только если хочется сделать что-то совсем нестандартное.
Я, например, воткнулся, когда хотел сделать неблокирующий канал, то есть такую штуку для общения двух потоков друг с другом, что один туда пишет, второй читает. Но если канал переполнен, то первый не ждет до посинения, а получает ошибку "канал переполнен", и наоборот, если там пусто, второй не ждет, а также получает ошибку. В линуксе это получилось элементарно, а вот корректного способа через winapi я так и не нашел, пришлось городить костыли через общую память и атомики.
Цитата Сообщение от Liss29 Посмотреть сообщение
кроссплатформенные средства разработки, они что не на API ОС разрабатывались?!
Сами по себе они, естественно, будут использовать API той системы, на которой запущены. Разница в том, что использовать их (и соответственно глубоко изучать) будут они, а не вы.
Знание принципов работы операционки, безусловно, полезно, но если вы не собираетесь упарываться в системное программирование (те же оболочки, драйвера, ядро ОС), то и слишком глубоко копать тоже не нужно.
Ну например, можете попробовать реализовать оконное приложение с кнопками, полями ввода и прочим сначала на чистом winapi, а потом на каком-нибудь gtk.
И я рекомендую сделать это не столько ради сравнения усилий, сколько ради именно понимания как winapi работает с окнами. Дескрипторы окон, цикл обработки событий, wParam, lParam и все такое. gtk это все скрывает, там объектная модель (даром что на Си написан).
Цитата Сообщение от Liss29 Посмотреть сообщение
Вообще, видимо, мне больше низкоуровневое программирование нравится
Возможно, стоит еще посмотреть в сторону линукса, возможностей ядерного программирования там больше. Да и сама организация более продумана.
Для примера, чтобы узнать загрузку процессора достаточно прочитать текстовый файл /proc/stat и поколдовать над чиселками. Аналогично для оперативки /proc/meminfo. В winapi для каждого действия своя специальная функция - GetSystemTimes и GlobalMemoryStatusEx.
Цитата Сообщение от Liss29 Посмотреть сообщение
Серьёзно, если не брать кроссплатформенные средства, то возможно ли написать достаточно серьёзно приложение, например, для работы с файлами в ОС Windows, Переместить, копировать, переименовать выбранные файлы или всё, как-то пометить их, синхронизировать папки ну и.т.д. Просто для себя, ради тренировки, если всё пойдёт гладко в изучении api...
Разумеется. Более того, это отличное упражнение. Можете, скажем, попробовать написать файловый менеджер или текстовый редактор (на самом деле это довольно сложная задача).
Цитата Сообщение от Замабувараев Посмотреть сообщение
Не надо ничего придумывать и городить костыли с SetConsoleCP. Для ввода и вывода юникодных строк на консоль есть функции WriteConsoleW и ReadConsoleW. Они сразу заполняют буфер символами типа WCHAR.
Продемонстрируйте, как этим пользоваться. Например, мне нужно ввести две строки и число, обычно я пишу scanf("%s%s%i", str1, str2, num);. Если хочется защититься от переполнения буфера, scanf("%100s%100s%i, str1, str2, num);. Это работает для utf-8. Если хочется utf-32, то аналогично
wscanf(L"%100ls%100ls%i", str1, str2, num);. Еще у scanf есть шаблоны, но оставим их пока.
Так вот, как мне сделать нечто подобное в виндовой консоли?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.09.2022, 09:47
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну как же не имеет. Попробуйте записать fprintf(file, "Привет мир\n"); из исходника в cp1251, а потом читать как юникод
Чтобы не было сюрпризов, строковые литералы следует обрамлять макросом TEXT("Привет мир\n") или превращать их в широкие символы L"Привет мир\n".
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
25.09.2022, 11:34  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я же писал: а вдруг у вас многопоточная программа, и оба потока захотят разложить разные строки на токены.
Т.е. если первый поток будет прерван не до конца выполнив разложение, второй поток, который его прервал начнёт разложение, разложит, управление вернётся к первому прерванному потоку, и он начнёт выполнение с первого значения в переменной NextToken? А если одинаковые строку будут раскладывать несколько потоков?!

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ни в одной из кодировок, которые я проверял, ничего похожего не было. Может, там какой-то свой внутренний формат?
Чего не знаю того не знаю, но скобки отображаются верно, значит дело в кириллических буквах. А кто виноват, не знаю.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
На самом деле именно winapi-специфики не так уж много и используется она только если хочется сделать что-то совсем нестандартное.
Так то оно так, даже в книге Страуструпа С++, если мне не изменяет память, встречается код, где используется winapi, работа с памятью, например.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Знание принципов работы операционки, безусловно, полезно, но если вы не собираетесь упарываться в системное программирование (те же оболочки, драйвера, ядро ОС), то и слишком глубоко копать тоже не нужно.
Я глубоко и не копаю, так на поверхности вожусь, но, если уж взялся, то не бросать же на полпути. Сейчас я вообще GUI-интерфейс на WinApi осваиваю так что совсем не глубоко зарылся) Их кроссплатформенных библиотек у меня присутствует FLTK, она небольшая, места занимает мало, но пока что я ей не особо пользовался, только окно создал и всё. Чуть-чуть по легче, чем на чисто WinApi и оформление по цивильней будет. GTK++ у меня нет, но я о нём где-то читал, не хочу устанавливать слишком много лишнего, тем чем не пользуюсь.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Возможно, стоит еще посмотреть в сторону линукса, возможностей ядерного программирования там больше.
Я бы посмотрел, но не могу объять необъятное, если буду распыляться, то в итоге вообще ничего не освою. Зато там нужно компилировать ручками) выбор сред в линукс не так велик, относительно, конечно.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Можете, скажем, попробовать написать файловый менеджер или текстовый редактор
Нет это для меня сложновато, тут всё же более обширные знания нужны, особенно работа с форматами текста, если говорть о редакторе, она меня просто в ужас приводит, я немного заглянул вперёд и приуныл нехило так, и это работа только с фиксированным текстом, а что говорить о TrueType.
0
 Аватар для COKPOWEHEU
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
25.09.2022, 12:27
Цитата Сообщение от Замабувараев Посмотреть сообщение
Чтобы не было сюрпризов, на винде строковые литералы следует обрамлять макросом TEXT("Привет мир\n") или превращать их в широкие символы L"Привет мир\n".
Вы главное забыли, я поправил. Потому что когда используется обычный utf-8, все ваши извращения просто не нужны.
Другое дело, что могут использоваться более полезные извращения вроде макросов локализации. Вот это, в отличие от TEXT, действительно полезная штука, хотя и явно не для начинающих. Собственно, полезной она становится только когда программой пользуются люди из разных стран.
.
Но вы бы лучше пример ввода юникода показали.
Цитата Сообщение от Liss29 Посмотреть сообщение
Т.е. если первый поток будет прерван не до конца выполнив разложение, второй поток, который его прервал начнёт разложение, разложит, управление вернётся к первому прерванному потоку, и он начнёт выполнение с первого значения в переменной NextToken? А если одинаковые строку будут раскладывать несколько потоков?!
Вы начали понимать!
Правда, мне не нравится ваш термин "поток прерван": на современных системах несколько потоков могут выполняться абсолютно одновременно. Но даже когда используется переключение контекстов, оно случается когда само захочет. Скажем, в первом потоке вы скормили strtok'у какую-то строку, он ее пожевал... и тут срабатывает переключение потоков, где второй тоже хочет разложить строку. То есть результат может оказаться любой! В худшем случае они отработают последовательно и без спецэффектов (надеюсь, догадаетесь, почему этот случай - худший). А могут и перемешать токены из разных строк.
Цитата Сообщение от Liss29 Посмотреть сообщение
код, где используется winapi, работа с памятью, например.
Разве что что-то глубоко ядерное, потому что всякие malloc/free, new/delete вшиты в язык намертво.
Хотя, конечно, низкоуровневая работа с памятью тоже возможна и позволяет проворачивать хитрые штуки. Например, линуксовый mmap отображает файл на память. То есть вы работаете с содержимым файла как с обычным массивом в обход всяких fread, fscanf и подобных.
Но это опять же экзотика, и надо четко понимать зачем оно нужно и какие ограничения.
Цитата Сообщение от Liss29 Посмотреть сообщение
Их кроссплатформенных библиотек у меня присутствует FLTK
Хм, а вот такую я в свое время не заметил, надо будет попробовать...
Цитата Сообщение от Liss29 Посмотреть сообщение
Чуть-чуть по легче, чем на чисто WinApi и оформление по цивильней будет.
Если хотите разобраться в оконной системе, рекомендую все-таки уделить время интерфейсам на чистом winapi. Не слишком большое и без фанатизма, но чтобы и в ступор не впасть, если захочется сделать демку небольшого размера.
Цитата Сообщение от Liss29 Посмотреть сообщение
Я бы посмотрел, но не могу объять необъятное, если буду распыляться, то в итоге вообще ничего не освою.
Есть такой шанс. Но в то же время это взгляд на ту же задачу с другой стороны. Знания смежных предметов редко оказываются бесполезными.
Цитата Сообщение от Liss29 Посмотреть сообщение
Зато там нужно компилировать ручками)
Для обучения это скорее плюс. Меньше IDE'шной магии. В любом случае gcc main.c не ахти какое сложное заклинание.
Ну и лично мне подобный способ (набивать код в обычном редакторе и собирать из консоли) нравится больше. Особенно для задач-пятиминуток, как на том же форуме.
Цитата Сообщение от Liss29 Посмотреть сообщение
и это работа только с фиксированным текстом, а что говорить о TrueType.
Имеется в виду моноширинный против адаптивного (не знаю как он по-нормальному называется). В текстовом редакторе, особенно редакторе кода, все равно использовать не-моноширинный шрифт это попрощаться с глазами. С другой стороны, никто же не заставляет вас с первой же версии поддерживать мышь. Пусть управление по-началу будет примитивным, как в каком-нибудь BorlandPascal'е замшелых годов. Это ведь учебная задача, а не заявка на мировое господство в области блокнотов.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.09.2022, 13:46
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы главное забыли, я поправил.
Зачем вы требуете отсутствия винапи в теме по винапи?
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
25.09.2022, 13:56
Цитата Сообщение от Liss29 Посмотреть сообщение
Например, если писать программы для консоли Windows.
Зачем для консоли виндовс Анси функции? не придираюсь, просто пытаюсь понять, зачем вам оно. Допустим, OutputDebugStringA нативно Анси , и в РЕ формате константы в виде char, ибо нет смысла совать юникод в имена секций и т.д. Но для текста имхо лучше брать именно юникод, мы же не англичане.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.09.2022, 14:52
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Так вот, как мне сделать нечто подобное в виндовой консоли?
Я не знаю как именно работает функция scanf, но полагаю, что она читает строку с консоли, разбивает её по пробелам и записывает результаты в переменные.

Вот пример программы, которая делает это без всяких стандартных библиотек:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <windows.h>
#include <shlwapi.h>
 
int ENTRYPOINT(void)
{
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
    
    const DWORD BufferLength = 265;
    
    WCHAR buffer[BufferLength + 1];
    DWORD readedChars;
    
    /*
        Читаем строку с консоли
        функция возвращает строку вместе с символами CrLf
    */
    ReadConsoleW(hIn, buffer, BufferLength, &readedChars, NULL);
    
    if (readedChars < 2)
        return 0;
    
    /* Затираем CrLf */
    int stringLength = readedChars - 2;
    buffer[stringLength] = L'\0';
    
    /* Разбить по пробелам на три подстроки */
    
    /* Первый пробел */
    PWSTR space1 = StrChrW(&buffer[0], L' ');
    if (space1 == NULL)
        return 1;
    
    /* Второй пробел */
    PWSTR space2 = StrChrW(&space1[1], L' ');
    if (space2 == NULL)
        return 1;
    
    /* Затереть пробелы */
    space1[0] = L'\0';
    space2[0] = L'\0';
    
    /* Получаем подстроки */
    WCHAR *substring1 = &buffer[0];
    WCHAR *substring2 = &space1[1];
    WCHAR *substring3 = &space2[1];
    
    /* Из строки в число */
    int value = _wtoi(substring3);
    
    MessageBoxW(NULL, substring1, L"Первая подстрока", MB_OK);
    MessageBoxW(NULL, substring2, L"Вторая подстрока", MB_OK);
    MessageBoxW(NULL, substring3, L"Третья подстрока", MB_OK);
    
    return 0;
};
Итого программа на чистом винапи получилась размером в 2 килобайта.
Миниатюры
Вывод информации в файл, Кириллица корректно не выводится  
Вложения
Тип файла: zip UnicodeConsoleInput.zip (6.1 Кб, 0 просмотров)
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
25.09.2022, 18:20
Замабувараев, scanf работает по типу printf, только наоборот. Т.е. читает ввод пользователя и записывает в переменные, исходя из спецификаторов (число, строка, еще что-нибудь).
Цитата Сообщение от Замабувараев Посмотреть сообщение
разбивает её по пробелам
для этого есть strtok.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.09.2022, 18:40
Цитата Сообщение от Morgot Посмотреть сообщение
для этого есть strtok.
То есть, вместо scanf всего‐то нужно было три раза вызвать ReadConsoleW, и задача решена?
0
 Аватар для COKPOWEHEU
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
25.09.2022, 21:03
Цитата Сообщение от Замабувараев Посмотреть сообщение
ачем вы требуете отсутствия винапи в теме по винапи?
Где я это требую?
Я всего лишь уточнил, что в winapi человеческий способ не работает, нужны костыли. Вы же сами их и описали.
Цитата Сообщение от Morgot Посмотреть сообщение
Зачем для консоли виндовс Анси функции?
ТС просто не знал, что виндовый терминал наконец-то научился в юникод. Правда, для этого там надо шрифт переключить и кодировку раками задать.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Я не знаю как именно работает функция scanf
Я надеюсь, вы сейчас говорили про внутреннее устройство, а не общую функциональность
Цитата Сообщение от Замабувараев Посмотреть сообщение
но полагаю, что она читает строку с консоли, разбивает её по пробелам и записывает результаты в переменные.
Серьезно?! Вы не знаете, как работает базовая функция ввода Си?!
Она не по пробелам разбивает, а ищет входжение подстрок по шаблону, причем если шаблон не соответствует строке, ввод прекращается, и функция возвращает ошибку. Например:
Шаблон "%i", строка "123e45" -> считает 123, а "e45" останется в потоке
Шаблон "%[a-z]", строка "SomeText123" считает "SomeText", а "123" оставит
Шаблон "%i%c", строка "123 456" считает 123 и пробел, а "456" оставит
Шаблон "%iabc%i", строка "123abcd45" считает 123, а "d45" оставит и вернет ошибку
В общем, лучше ознакомьтесь с документацией.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Вот пример программы, которая делает это без всяких стандартных библиотек:
Не понял. То есть вместо того, чтобы хотя бы имитировать стандарт, целенаправленно ухудшаете совместимость?
Цитата Сообщение от Замабувараев Посмотреть сообщение
То есть, вместо scanf всего‐то нужно было три раза вызвать ReadConsoleW, и задача решена?
То есть можно сделать ReadConsoleW + sscanf, но это все равно костыль и не всегда будет работать корректно. Хотя все равно лучше вашего варианта.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
26.09.2022, 03:34
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы не знаете, как работает базовая функция ввода Си?!
Да, не знаю. Меня вообще не интересуют стандартные библиотеки, тем более такая скудная по функциональности, как стандартная библиотека языка Си, годящаяся разве что для лабораторных работ первого семестра. Разработчики этой библиотеки за 30 лет существования WinAPI не могут понять: юникод в виндоуз — это UTF-16, до сих пор считают что 1 символ занимает 1 char. Так эти стандартные библиотеки раздувают программу, и на выходе вместо исполняемого файла получается BloatWare.

В вашем варианте со scanf всегда приходится извращаться либо с SetConsoleCP, либо с system("chcp 1251"), либо setlocate(LC_ALL, "RUSSIAN") и прочей нестандартной ерундой. Вторая проблема SetConsoleCP, что после её вызова всегда забывают вернуть кодовую страницу взад, и ежели программу запускали в пакетном режиме, то это сбивает всю дальнейшую кодировку.

Я предпочитаю вызывать функции ОС напрямую, потому что они работают без костылей, без изменений кодовых страниц и без «смены шрифта в консоли».

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В общем, лучше ознакомьтесь с документацией.
Совершенно не интересно. Во‐первых, я могу просто получить строку из консоли и парсить её регулярками, во‐вторых, в 21 веке пользовательский ввод идёт через GUI и текстовые поля. И далее опять парсить регулярками.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
То есть вместо того, чтобы хотя бы имитировать стандарт, целенаправленно ухудшаете совместимость?
Совместимость с чем? С WinAPI? Ну так стандарт юникода в WinAPI — это UTF-16. ReadConsoleW как раз работает со строками в UTF-16, всё по стандарту.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
виндовый терминал
В винде нет терминала. Перестаньте называть консоль терминалом.
Терминал управляется текстовыми последовательностями.
Консоль управляется через богатый набор функций.

Добавлено через 3 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы не знаете, как работает базовая функция ввода Си?!
Да, не знаю. Меня вообще не интересуют стандартные библиотеки, тем более такая скудная по функциональности, как стандартная библиотека языка Си, годящаяся разве что для лабораторных работ первого семестра. Разработчики этой библиотеки за 30 лет существования WinAPI не могут понять: юникод в виндоуз — это UTF-16, до сих пор считают что 1 символ занимает 1 char. Так эти стандартные библиотеки раздувают программу, и на выходе вместо исполняемого файла получается BloatWare.

В вашем варианте со scanf всегда приходится извращаться либо с SetConsoleCP, либо с system("chcp 1251"), либо setlocate(LC_ALL, "RUSSIAN") и прочей нестандартной ерундой. Вторая проблема SetConsoleCP, что после её вызова всегда забывают вернуть кодовую страницу взад, и ежели программу запускали в пакетном режиме, то это сбивает всю дальнейшую кодировку.

Я предпочитаю вызывать функции ОС напрямую, потому что они работают без костылей, без изменений кодовых страниц и без «смены шрифта в консоли».

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В общем, лучше ознакомьтесь с документацией.
Совершенно не интересно. Во‐первых, я могу просто получить строку из консоли и парсить её регулярками, во‐вторых, в 21 веке пользовательский ввод идёт через GUI и текстовые поля. И далее опять парсить регулярками.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
То есть вместо того, чтобы хотя бы имитировать стандарт, целенаправленно ухудшаете совместимость?
Совместимость с чем? С WinAPI? Ну так стандарт юникода в WinAPI — это UTF-16. ReadConsoleW как раз работает со строками в UTF-16, всё по стандарту.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
виндовый терминал
В винде нет терминала. Перестаньте называть консоль терминалом.
Терминал управляется текстовыми последовательностями.
Консоль управляется через богатый набор функций.
1
 Аватар для COKPOWEHEU
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
26.09.2022, 10:30
Цитата Сообщение от Замабувараев Посмотреть сообщение
стандартная библиотека языка Си <...> Разработчики этой библиотеки за 30 лет существования WinAPI не могут понять: юникод в виндоуз — это UTF-16
scanf и прочий stdio это библиотека Си. Языка. Того, что равно пригодно и для суперкомпьютеров и для восьмибитных контроллеров.
С чего вы вообще взяли, что они должны подстраиваться под косяки winapi? В цивилизованном мире давным-давно используется utf-8, и большая часть стандартных функций с ним работает вообще без модификаций. Не говоря уж о том, что выбор utf-16 иначе как идиотизмом назвать не получается: он и места занимает больше utf-8, и все равно остается многобайтным. Нормальный wchar_t (который utf-32) хотя бы кодирует одну букву одним символом.
Цитата Сообщение от Замабувараев Посмотреть сообщение
В вашем варианте со scanf всегда приходится извращаться либо с SetConsoleCP, либо с system("chcp 1251"), либо setlocate(LC_ALL, "RUSSIAN") и прочей нестандартной ерундой. Вторая проблема SetConsoleCP, что после её вызова всегда забывают вернуть кодовую страницу взад, и ежели программу запускали в пакетном режиме, то это сбивает всю дальнейшую кодировку.
А что поделать, это винда. Нормального решения, повторяю, я не нашел.
В более дружелюбных ОС ничего подобного не требуется, оно просто работает.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Я предпочитаю вызывать функции ОС напрямую, потому что они работают без костылей, без изменений кодовых страниц и без «смены шрифта в консоли».
К сожалению, в винде без костылей даже юникод не вывести. А чтобы ввести, как мы только что выянили, даже костыли не помогают!
Цитата Сообщение от Замабувараев Посмотреть сообщение
получить строку из консоли и парсить её регулярками
А зачем, когда давным-давно изобретена стандартная функция, ровно для этого предназначенная и с куда более простым синтаксисом. Ну ладно, не нравится Си-шная, перегрузите плюсовые.
Цитата Сообщение от Замабувараев Посмотреть сообщение
в 21 веке пользовательский ввод идёт через GUI и текстовые поля.
Но основной ввод все равно через консоль.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Совместимость с чем? С WinAPI?
Совместимость с Си, естественно. Еще не хватало писать два разных варианта кода - прямой для обычных ситсем, и костыльный персонально для винды.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Консоль управляется через богатый набор функций. костылей
Я боюсь представить страдание людей, которые пытаются реализовать аналог screen, ssh или curses для винды...
---
TLDR: не перекладывайте ответственность за виндовые косяки на окружающих. Есть стандарт языка, которому все следуют. Есть соглашения вроде utf-8 представления для юникода, которым все следуют.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
26.09.2022, 11:22
Сишник думает, что Си — это единственный язык программирования из пяти тысяч созданных, и ОС должна подстраиваться под какую‐то там библиотеку языка Си из 1973 года, игнорируя все современные интерфейсы, железо и парадигмы разработки.

На самом деле это библиотека Си должна подстраиваться под ОС и скрывать детали реализации. Печально, что разработчики библиотеки за 30 лет этого не поняли.

Я понимаю, что для сишников в принципе нормально дискриминировать любые функции, которые не находятся в стандартной библиотеке. Но если так делать, то много чего исчезнет, например, сетевое программирование, которое ни в каком стандарте языка Си не описано.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
26.09.2022, 12:57  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В худшем случае они отработают последовательно и без спецэффектов (надеюсь, догадаетесь, почему этот случай - худший)
Последовательно, значит сначала один поток её разложит затем второй, если, конечно, последовательно здесь употребляется в том же контексте.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А могут и перемешать токены из разных строк.
В памяти строка располагается по одному и тому же адресу, правильно, или для каждого потока своя память выделяется, я в курсе что для каждого потока выделяется определённый участок памяти, но, если работать со строкой, которая определена не в каком то потоке, а глобально, то они будут раскладывать одну и ту же строку. Значит первый поток может продвинуться в разложении дальше, чем прервавший его второй поток, и получается, что, когда управление вернётся к первому потоку, то он начнёт не с того места, на выполнении которого его прервали. Но переменная &NextToken сохраняет прежнее состояние, то которое было до того, как его прервали. Но можно заблокировать поток на время его выполнения, разве это не вариант, особенно, если он меняет данные строки, массива или переменных.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но это опять же экзотика, и надо четко понимать зачем оно нужно и какие ограничения.
А чтобы это понимать или хотя бы попытаться понять, нужно изучать как это работает, для начала, других способов понять я не знаю.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Разве что что-то глубоко ядерное
Я точно не помню, по моему он там показывает пример, как можно реализовать свой сборщик мусора т.к. в С++ его нет, он даёт пример того, как его можно реализовать на С++. Хотя сейчас точно не скажу так ли это, возможно, что-то другое, но точно что-то связанное с рабой памяти.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если хотите разобраться в оконной системе, рекомендую все-таки уделить время интерфейсам на чистом winapi.
По сути, без него сейчас никак, в большинстве своём пишут с GUI-интерфейсом. Хотя эта тема стала настолько обширна, что по тем книгам, которые мне доступны можно изучить только крошечную её часть.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но в то же время это взгляд на ту же задачу с другой стороны. Знания смежных предметов редко оказываются бесполезными.
Для начал нужно тогда уж изучение начать с самой ОС Линукс, а уж потом программировать пытаться, а это не маленькая тема. Это абсолютно иное устройство ОС. Так что у меня стоит Ubuntu на виртуальной машине, но пока, то время, что я уделяю изучения программирования - это Windows, к сожалению, всё дело в том, что на некоторые мелочи приходится искать ответ довольно долго.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Для обучения это скорее плюс. Меньше IDE'шной магии.
Кому как. Если это простейшие команды, то да, а если нет, тогда нужно помнить кучу всяких параметров, а это, в свою очередь, отвлекает от основного материала. Я пробовал ручками компилировать т.е. make-файлы писать, но понял, что пока что лучше отложить, хотя для Питзольда создал два мака.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Имеется в виду моноширинный против адаптивного (не знаю как он по-нормальному называется).
Видимо так, если TrueType имеется ввиду. Так и называется это не один шрифт. Векторный не векторный не могу точно сказать, но он более гибкий, что стандартный, я так понял.

Цитата Сообщение от Morgot Посмотреть сообщение
Зачем для консоли виндовс Анси функции?
Я не могу сказать зачем, я уже писал, но повторюсь, я исхожу из того, что изучаю, книги, в основном, написаные в англоязычных странах такими же англоязычными людьми и довольно давно, по компьютерным меркам. Например у Харта, я его ещё не читал, но заглядывал в начало, там тоже применяется вся та же магия, что и у Рихтера, макросы, которые сами адаптирую функции под настройки ОСи. Я думал, что консоль работает с ASCII кодировкой, а это 127 символов т.е. тип char, который как раз подходит под функции с окончанием SomeFunctionA, да и места занимают меньше. Но, если можно работать с консолью в unicode и при этом устраняться все те проблемы с вводом/выводом русскими текстов, то я только за.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2022, 12:57

Кодировка , кириллица не корректно отображается
страницы нормально распознают кирилицу, с базы тоже кирилицу нормально отображает. Вот никак не могу понять при отправке ajax-ом форму...

Не выводится кириллица
Никак не хочет работать кириллица.#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;locale.h&gt; #include...

Не выводится кириллица из БД
не выводится кирилица из БД $mysqli = new mysqli (&quot;localhost&quot;, &quot;root&quot;, &quot;&quot;, &quot;mybasenew&quot;); $mysqli-&gt;query (&quot;SET NAMES 'utf8'&quot;); ...

Не выводится кириллица в консоль
main.c #include &lt;stdlib.h&gt; #include &quot;menu.h&quot; int main(){ menu_item list= {

Кириллица выводится некорректно
Добрый день Друзья! У меня возникла такая проблема надо реализовать в программе на Си чтобы можно было вводить русские буквы и они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru