• Как построчно записать файл в каждый элемент массива LittleFS?

    @Acaunt
    Даниил Бозанарчук, хорошо завтра постараюсь отправить решение, но только несколько уточнений:
    1) Массив чего?(int, double, float, char, string)
    2) Ты какой массив предпочтёшь? (vector или простой массив)
    3) Я правильно понял, что это одномерный массив? (arr[n])
    4) Тебе лучше засунуть всё в 1 класс синглтон или отдельными функциями?
    5) Тебе заранее может быть известно количество элементов в массиве (строк в файле) ? (Этот вопрос нужен, если ты предпочитаешь обычный массив, вместо vector)
    6) Расположение файла тебе известно? (Например как на ПК C://.../документы)
  • Как построчно записать файл в каждый элемент массива LittleFS?

    @Acaunt
    Я с Ардуино не знаком, но раз тема вопроса находится в C++ могу предложить как это делается именно на C++. Напиши если нужно.
  • Что можете сказать про данный код?

    @Acaunt Автор вопроса
    Спасибо за критику
    1) input я понимаю, что бесполезная функция. Сделал её только потому что, чтобы всё в одной стилистике выглядело.
    А зачем мне другие типы данных это же просто вывод строк в консоль?

    2) не совсем понял

    3) list, потому что я думал об этой переменной как страница текста

    4)num не знал как обозвать, сделал её, чтобы сократить запись std::to_string()

    5) написал просто как можно использовать для примера, да и к тому же зачем выводить в консоль текст который пользователь только что ввёл
  • Можно ли при вызове функции указать в него тип данных?

    @Acaunt Автор вопроса
    Dmitrii, Евгений Шатунов, Спасибо вам за помощь, но мне пришлось ещё немного переделать функцию. Я оставлю здесь то, что у меня получилось для тех кто ищет подобное решение:
    Решение
    #include <iostream>
    
    template<typename TResult>
    TResult search(std::string str) {
        /*
        Поиск параметра
        */
        TResult res;
        if constexpr (std::is_same_v<TResult, int>) {
            // Проверяю найденное значение на тип данных int
            res = 5; // Вместо 5 найденное значение
            // Написал для примера
        }
        else if  constexpr (std::is_same_v<TResult, std::string>) {
            res = "Просто пример";
        }
        return res;
    }
    
    int main() {
        int a = search<int>("a");
        std::string b = search<std::string>("b");
    }
  • Можно ли при вызове функции указать в него тип данных?

    @Acaunt Автор вопроса
    Спасибо за реализацию только ещё пара вопросов:
    1) в main обязательно ли указывать auto, а не int и std::string.
    2) как вам кажется, что лучше будет использовать моё решение или то что вы написали?
  • Как сделать static struct in static class (C++)?

    @Acaunt Автор вопроса
    Adamos, так я и хочу спрятать их в классе не делая глобальными, единственное хочу визуально отделить их от функций класса
  • Как сделать static struct in static class (C++)?

    @Acaunt Автор вопроса
    Adamos, извольте, я знаю только C++, к другим языкам я не притрагивался.
  • Как сделать static struct in static class (C++)?

    @Acaunt Автор вопроса
    Adamos, можете объяснить поподробнее, я любитель и знаю только основы. И чем конкретно попахивает?
  • Вопрос по оформлению кода C++?

    @Acaunt Автор вопроса
    Не ответ, а целая статья.
    Спасибо за разъяснения.
  • Вопрос по оформлению кода C++?

    @Acaunt Автор вопроса
    Спасибо за советы. И да сам знаю что пример не удачный, но я не хотел писать большой пример, это первое что мне пришло в голову. А так я имел в виду только стоит ли в функции писать else если другого кода нет, поэтому на цикл здесь можно и не смотреть
  • Вопрос по оформлению кода C++?

    @Acaunt Автор вопроса
    Спасибо, позже постараюсь изучить весь материал.
  • Вопрос по оформлению кода C++?

    @Acaunt Автор вопроса
    Согласен с вами, но я написал данный вопрос, чтобы большая часть третьих лиц, которая посмотрев код им было легче его читать. А так же потому что я сам любитель и писал бы на общепринятом стандарте
  • Вопрос по оформлению кода C++?

    @Acaunt Автор вопроса
    Можете написать свой пример по написанию циклов без египетских скобок очень заинтересовался (в голове пронеслась мысль: "А что так можно было?")
    В 6-7 я имел ввиду:
    if пробел который здесь ()
    foo пробел который здесь ()
    И да спасибо за предупреждение о внимательности Я просто несколько раз переписывал этот вопрос. Вот и проглядел.
  • Можно ли создать пустую структуру, а потом её заполнить внутри функции?

    @Acaunt Автор вопроса
    Евгений Шатунов, спасибо за критику учту на будущее что нужно будет ещё изучить. (И да я не програмист, по профессии электрик, а это хобби)
  • Можно ли создать пустую структуру, а потом её заполнить внутри функции?

    @Acaunt Автор вопроса
    Спасибо это меня навело на мысли что можно изменить. У меня уже есть своя реализация конфига её нужно только немного дополнить, тем что вы предложили. Сделаю это позже, а пока то что есть у меня сейчас:
    Config.h
    #ifndef CONFIG_H_
    #define CONFIG_H_
    
    #include <string>
    #include <vector>
    
    class Config {
    private:
    	
    	static std::vector<std::string> list;
    	static void update();
    public:
    	static int initialize();
    	static void rewrite(std::string parametr, std::string value = "");
    	static std::string search_str(std::string parametr);
    	static int search_int(std::string parametr);
    	static bool search_bool(std::string parametr);
    };
    
    #endif /* CONFIG_H_ */


    Config.cpp
    #include "Config.h"
    
    #include <iostream>
    #include <fstream>
    
    std::ofstream w_config;
    std::ifstream r_config;
    
    std::vector<std::string> Config::list{
    	"title = NAME",
    	"window_mode = 0",
    	"width = 800",
    	"hight = 600"
    };
    
    void Config::update() {
    	std::cout << "Create file Config.ini" << std::endl;
    	w_config.open("Config.ini");
    	for (int a = 0; a < list.size() ; a++) {
    		w_config << list[a] << std::endl;
    	}
    	w_config.close();
    }
    
    int Config::initialize() {
    	r_config.open("Config.ini");
    	if (!r_config.is_open()) {
    		r_config.close();
    		std::cout << "Have not file Config.ini" << std::endl;
    		update();
    		r_config.open("Config.ini");
    	}
    
    	if (!r_config.is_open()) {
    		r_config.close();
    		std::cerr << "Failed open file Config.ini" << std::endl;
    		return -1;
    	}
    	else if (r_config.peek() == EOF) {
    		r_config.close();
    		std::cout << "File Config.ini empty" << std::endl << "Re-";
    		update();
    		r_config.open("Config.ini");
    	}
    
    	if (!r_config.is_open()) {
    		r_config.close();
    		std::cerr << "Failed open file Config.ini" << std::endl;
    		return -1;
    	}
    	else {
    		r_config.close();
    		std::cerr << "Open file Config.ini" << std::endl;
    		return 0;
    	}
    }
    
    void Config::rewrite(std::string parametr, std::string value) {
    	std::cout << "Rewrite the parameter in file Config.ini" << std::endl;
    	std::string str;
    
    	if (value == "") {
    		for (int a = 0; a < list.size(); a++) {
    			str = list[a].substr(0, list[a].find_first_of(' '));
    			if (str == parametr) {
    				value = list[a];
    				break;
    			}
    		}
    	}
    	else {
    		value = parametr + " = " + value;
    	}
    
    	bool i = 1;
    	w_config.open("Config_copy.ini");
    	r_config.open("Config.ini");
    	while (!r_config.eof()) {
    		std::getline(r_config, str);
    		if (parametr == str.substr(0, str.find_first_of(' '))) {
    			w_config << value << std::endl;
    			i = 0;
    		}
    		else if (str == "") {}
    		else {
    			w_config << str << std::endl;
    		}
    	}
    	if (i) {
    		w_config << value << std::endl;
    	}
    	w_config.close();
    	r_config.close();
    
    	w_config.open("Config.ini");
    	r_config.open("Config_copy.ini");
    	while (!r_config.eof()) {
    		std::getline(r_config, str);
    		if (str == "") {}
    		else {
    			w_config << str << std::endl;
    		}
    	}
    	w_config.close();
    	r_config.close();
    	std::remove("Config_copy.ini");
    }
    
    std::string Config::search_str(std::string parametr) {
    	std::string str;
    
    	for (int a = 0; a < 2; a++) {
    		r_config.open("Config.ini");
    		std::cout << "Search in file Config.ini -> " << parametr;
    
    		while (!r_config.eof()) {
    			std::getline(r_config, str);
    
    			if (parametr == str.substr(0, str.find_first_of(' '))) {
    				r_config.close();
    				str.erase(0, parametr.length() + 3);
    				break;
    			}
    			else {
    				str = "";
    			}
    		}
    
    		if (str == "") {
    			r_config.close();
    			std::cout << " -> not found" << std::endl;
    			rewrite(parametr);
    		}
    		else {
    			break;
    		}
    	}
    
    	std::cout << " = " << str << std::endl;
    
    	return str;
    }
    
    int Config::search_int(std::string parametr) {
    	std::string int_str = Config::search_str(parametr);
    	char* ch;
    	strtol(int_str.c_str(), &ch, 10);
    
    	if (*ch) {
    		std::cout << "Not the corect value" << std::endl;
    		rewrite(parametr);
    		int_str = search_str(parametr);
    	}
    
    	return stoi(int_str);
    }
    
    bool Config::search_bool(std::string parametr) {
    	std::string bool_str = search_str(parametr);
    
    	if (bool_str == "0") {}
    	else if (bool_str == "1") {}
    	else {
    		std::cout << "Not the corect value" << std::endl;
    		rewrite(parametr);
    		bool_str = search_str(parametr);
    	}
    
    	return stoi(bool_str);
    }
  • Можно ли создать пустую структуру, а потом её заполнить внутри функции?

    @Acaunt Автор вопроса
    res2001, Евгений Шатунов,
    Вот мой код:

    Core.h
    #ifndef _Core_H_
    #define _Core_H_
    
    #include <iostream>
    //убрать после создания класса обработки событий
    #include <GLFW/glfw3.h>
    
    #include "Config.h"
    #include "Window.h"
    #include "Graphic.h"
    
    class Сore {
    private:
    	static void get_system_parameters();
    public:
    	static bool initialize();
    	static void run();
    	static void terminate(int code = 0);
    };
    
    
    #endif // !_Core_H_


    Core.cpp
    include "Core.h"
    
    struct Date {
        std::string title;
        bool fullskreen;
        bool window_mode;
        int width;
        int height;
        int render_API;
    };
    
    Date date;
    
    void Core::get_system_parameters() {
        std::cout << "Get system parameters" << std::endl;
        //каждая функция Config::search пишет в консоль какую переменую ищет в файле и её значение
        date.title = Config::search_str("title");
        date.fullskreen = Config::search_bool("fullskreen");
        date.window_mode = Config::search_bool("window_mode");
        date.width = Config::search_int("width");
        date.height = Config::search_int("height");
        date.render_API = Config::search_int("render_API");
    }
    
    bool Core::initialize() {
        if (!Config::initialize()) { terminate(1); }
        //после инициализации конфига в консоль пишется что файл открыт
        //в функции ниже заполняется переменные в структуре
        get_system_parameters();
        if (!Window::initialize()) { terminate(2); }
        if (!Window::create_window(date.title, date.fullskreen, date.window_mode, date.width, date.height)) { terminate(3); }
        if (!Graphic::initialize(date.render_API)) { terminate(4); }
        return 0;
    }
    
    void Core::run() {
        while (!Window::is_should_close()) {
            //убрать после создания класса обработки событий
            glfwPollEvents();
        }
    }
    
    void Core::terminate(int code) {
        Window::terminate();
        Graphic::terminate(date.render_API);
        exit(code);
    }


    В данный момент всё работает так как нужно
    Я не хочу писать дважды параметры в структуре и в функции получения системных параметров, а только 1 раз в функции. Можно ли что-нибудь сделать?
  • Можно ли создать пустую структуру, а потом её заполнить внутри функции?

    @Acaunt Автор вопроса
    Я так уже делал, у меня нарушится вывод в консоли например:
    Ищу некое значение
    Ищу некое значение
    Ищу некое значение
    Открываю файл
    А я хочу чтобы было так:
    Открываю файл
    Ищу некое значение
    Ищу некое значение
    Ищу некое значение
    К сожалению не могу сейчас отправить исходник
  • Можно ли создать пустую структуру, а потом её заполнить внутри функции?

    @Acaunt Автор вопроса
    Евгений Шатунов, и ещё я не хочу по 2 раза писать одни и те же переменые в структуре объявляя их, а в экземпляре уже присваивать
  • Можно ли создать пустую структуру, а потом её заполнить внутри функции?

    @Acaunt Автор вопроса
    Евгений Шатунов, если я сразу в структуре присвою значения то у меня нарушится вывод в консоли например:
    Ищу некое значение
    Ищу некое значение
    Ищу некое значение
    Открываю файл
    А я хочу чтобы было так:
    Открываю файл
    Ищу некое значение
    Ищу некое значение
    Ищу некое значение