Другое С/С++ Вопрос - Ответ

EclipsedFlow

Известный
Проверенный
1,038
462
При чтении строк библиотекой fstream, плагин СФ выводит иероглифы, как исправить?
 

EclipsedFlow

Известный
Проверенный
1,038
462
Куда выводит? код? многобайтовая кодировка? что читаешь? может там и записаны иероглифы
Пробовал в консоль и в чат выводить, многобайтовая кодировка стоит, читаю txt по строкам анг. буквы и цифры.
 

EclipsedFlow

Известный
Проверенный
1,038
462
При компиляции вот такого кода ( SFPlugin )
cod:
#include <Windows.h>
#include "main.h"

SAMPFUNCS *SF = new SAMPFUNCS();

void __stdcall mainloop()


void CALLBACK cmd_show_info_player(std::string param);
{
    if (param.empty()) return;
    int    i = std::stoi(param);

    char buf[128];

    stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i];

    if (!pPlayer) return;

    sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
        pPlayer->szPlayerName,
        pPlayer->iPing,
        pPlayer->iScore,
        pPlayer->iIsNPC,
        pPlayer->pPlayerData->iAFKState == 2);

    SF->getSAMP()->getChat()->AddChatMessage(-1, buf);
};


{
    static bool initialized = false;
    if (!initialized)
    {
        if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
        {
            initialized = true;
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
            SF->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player);
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
        SF->initPlugin(mainloop, hModule);
    return TRUE;
}

Выдаёт такую ошибку:

1>------ Сборка начата: проект: SFPlugin, Конфигурация: Release Win32 ------
1> main.cpp
1>main.cpp(9): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>main.cpp(10): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>main.cpp(31): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Ну хотябы озы c++ поучи
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
При компиляции вот такого кода ( SFPlugin )
cod:
#include <Windows.h>
#include "main.h"

SAMPFUNCS *SF = new SAMPFUNCS();

void __stdcall mainloop()


void CALLBACK cmd_show_info_player(std::string param);
{
    if (param.empty()) return;
    int    i = std::stoi(param);

    char buf[128];

    stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i];

    if (!pPlayer) return;

    sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
        pPlayer->szPlayerName,
        pPlayer->iPing,
        pPlayer->iScore,
        pPlayer->iIsNPC,
        pPlayer->pPlayerData->iAFKState == 2);

    SF->getSAMP()->getChat()->AddChatMessage(-1, buf);
};


{
    static bool initialized = false;
    if (!initialized)
    {
        if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
        {
            initialized = true;
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
            SF->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player);
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
        SF->initPlugin(mainloop, hModule);
    return TRUE;
}

Выдаёт такую ошибку:

1>------ Сборка начата: проект: SFPlugin, Конфигурация: Release Win32 ------
1> main.cpp
1>main.cpp(9): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>main.cpp(10): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>main.cpp(31): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
У тебя явно написано где ошибка, чего не хватает, и почему не компилируется
 
  • Нравится
Реакции: sc6ut

EclipsedFlow

Известный
Проверенный
1,038
462
Выводит какой-то бред, замахался с этим уже, помогите пожалуйста.

C++:
std::ifstream file(license_txt);
    if (file.is_open())
    {
        std::string lines;
        while (std::getline(file, lines)) // Перебирает строки и потом сравнивает с hdd_now
        {
            if (lines == hdd_now) {
                SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines);
                msg("Подписки куплена, приятного использования");
            }
            else
            {
                SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines);
                msg("Подписки нету, её нужно купить");
            }
        }
        file.close();
    }

Скрин:
1635626871650.png
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Выводит какой-то бред, замахался с этим уже, помогите пожалуйста.

C++:
std::ifstream file(license_txt);
    if (file.is_open())
    {
        std::string lines;
        while (std::getline(file, lines)) // Перебирает строки и потом сравнивает с hdd_now
        {
            if (lines == hdd_now) {
                SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines);
                msg("Подписки куплена, приятного использования");
            }
            else
            {
                SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines);
                msg("Подписки нету, её нужно купить");
            }
        }
        file.close();
    }

Скрин:
Посмотреть вложение 119843
Для std::string следует использовать метод .c_str()
C++:
lines.c_str()
Для выводы HDD скорее тебе требуется: "%X"