Задать вопрос
  • Как сделать 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 Автор вопроса
    Евгений Шатунов, если я сразу в структуре присвою значения то у меня нарушится вывод в консоли например:
    Ищу некое значение
    Ищу некое значение
    Ищу некое значение
    Открываю файл
    А я хочу чтобы было так:
    Открываю файл
    Ищу некое значение
    Ищу некое значение
    Ищу некое значение
  • Как можно масштабировать окно GLFW с постоянным соотношением сторон?

    @Acaunt Автор вопроса
    А в библиотеке GLFW как реализовать?
  • Почему Config::search у меня возвращает мусор?

    @Acaunt Автор вопроса
    Wataru, всё, я проверил ошибок нет. Я просто хотел узнать то ли число выводится и немного испугался, когда увидел шестнадцатиричное значение. Ладно, большое спасибо. Надеюсь больше не побеспокою.
  • Почему Config::search у меня возвращает мусор?

    @Acaunt Автор вопроса
    Wataru,
    #include <iostream>
    #include "Config.h"
    int main() {
    std::cout << Config::lot_list() << std::endl;
    return 0;
    }
  • Почему Config::search у меня возвращает мусор?

    @Acaunt Автор вопроса
    Wataru, я написал тот код с телефона не обращая на грамматику так как я не могу отправить сразу с компьютера(интернета нет) поэтому мне приходится через юсб передавать текстовый файл на телефон и с телефона сюда вот код
    #ifndef CONFIG_H_
    #define CONFIG_H_
    
    #include <string>
    #include <vector>
    
    class Config {
    private:
    	
    	static std::vector<std::string> list;
    	static void update();
    public:
    	static size_t lot_list();
    	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_ */

    #include "Config.h"
    
    #include <iostream>
    #include <fstream>
    
    std::ofstream w_config;
    std::ifstream r_config;
    
    size_t Config::lot_list() {
    	return list.size();
    }
    
    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 < lot_list(); 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 < lot_list(); 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);
    }
  • Почему Config::search у меня возвращает мусор?

    @Acaunt Автор вопроса
    Wataru,
    size_t Config::lot_list() {
    return list.size;
    }
    int main() {
    std::cout << Config::lot_list()

    Я делал int lot_list тоже самое
  • Почему Config::search у меня возвращает мусор?

    @Acaunt Автор вопроса
    Wataru, я просто написал отдельно вывести переменную в консоль потому что мне нужно было удостовериться что возвращает нужное значение
  • Почему Config::search у меня возвращает мусор?

    @Acaunt Автор вопроса
    Wataru, в функции lot_list написал
    return list.size();
    Консоль мне вывела значение: 00007FF7D67301