Ответы пользователя по тегу C++
  • Какие нужно знать аспекты C++ для работы с Unreal Engine 4?

    @FloorZ
    Если в UE4 пользоваться блупринтами только, то знания С++ там вообще не нужны.
    Но если ты собрался писать блупринты на плюсах - то надо как минимум пройти главу по классам, библиотекам STL, шаблонное программирование и т.д.
    В UE4 используются свои типы и специфичные макросы.
    Ответ написан
    Комментировать
  • Какие есть сайты\книги\ресурсы с тестами (желательно с ответами) по языку программирования С++ и технологиям программирования?

    @FloorZ

    - найдите ошибку в исходном коде;
    - что будет выведено на экран в результате работы программы;
    - оптимизируйте исходный код;
    - напишите код по приведенному алгоритму;
    ...
    Может быть кто-то уже использовал или видел подобное, на сайтах ВУЗов или в методичках или еще где?

    Я подобное видел в логе ошибок компилятора :D
    Ответ написан
    Комментировать
  • Зачем return в программе?

    @FloorZ
    main() - это входящая функция. И все же это именно функция, со всеми вытекающими свойствами.
    Ее можно обьявить как void, а значит она не должна что либо возвращать и return писать не надо.
    Все же многие не понимают по началу, что return, это не только остановка программы, но еще и вывод результата работы функций.
    Пример:
    //создаем свою собственную функцию, которая что-то делает и что-то возвращает.
    int myrandom() {
        int a;
        a = rand()%100; //генерация случайного числа
        return a; // возвращаем результат генерации
    }
    
    //а вот наша программка, в которой мы вызовем эту функцию.
    void main() {
      int s = myrandom(); // функция myrandom возвращает результат в переменную s.
      cout << s;
    }
    Ответ написан
    3 комментария
  • Как посимвольно сравнить каждую цифру в числе?

    @FloorZ
    Книга Алгоритмы "Кормен" вторая глава. Простой сортировочный алгоритм. Именно то что вам надо.
    Не трудно найти в pdf формате. В топе поиска сразу.
    Ответ написан
    Комментировать
  • Как правильно переписать часть кода с Python на Си?

    @FloorZ
    bool isvalueinarray(char val, char arr, char size){
        int i;
        for (i=0; i < size; i++) {
            if (arr[i] == val)
                return true;
        }
        return false;
    }


    Эм... что это за char size? Почему тип int сравнивается с типом char?
    Ответ написан
    Комментировать
  • Обучающая литература. Какие книги помогут новичку?

    @FloorZ
    Определись с языком, с которого начнешь.
    Если С++ - учебник "Прата С. - Язык программирования С++. Лекции и упражнения - 2011".
    Ответ написан
    Комментировать
  • На выходе из функции переменная почему-то становится нулем. Из-за чего так может быть?

    @FloorZ
    Либо ссылкой. Либо можно sum объявить в классе и оперировать им в функциях напрямую. Я бы вообще почти весь игровой процесс реализовал бы в классе.

    Самое простое:
    void playerturn1(int x, int y, int &sum, int x1, int y1);
    
    ...
    
    void Checkers::playerturn1(int x, int y, int &sum, int x1, int y1) {
    ...
    }
    Ответ написан
    Комментировать
  • Проблема при загрузке бинарного файла, проект неожиданно закрываться при компиляции?

    @FloorZ
    Проблема как понимаю в этой функции. Но где именно ума не приложу:

    Поставить точку остановки в функции и пошагово ее в отладчики отработать?
    Ответ написан
  • Почему в C++ некорректная работа с переменными и указателями?

    @FloorZ
    Сам принцип программы не правильный. Буффер работает как по мне - не правильно, мы передаем содержимое буффера без учета размера самого _string, в итоге наш массив _string несколько раз перезаписывается мусором из памяти. Плюс передача массива в массив не правильно сделана.
    А вообще есть такая вещь как new (buffer) type, конечно не по теме, но интересная;

    Копировать один массив в другой массив так грубо тоже не стоит. По сути ошибка тут:
    char *strcat_s(char *_string, char _buffer[100]) {
    _string = _buffer;
    return _string;
    }

    А если мы попытаемся присвоить пустую строку - будет ОЧЕНЬ плохо.
    Массив присваивать другому массиву нельзя.
    Не забывай, когда мы пишем массив вот так:
    _string, по сути это тоже самое что писать &_string[0].
    Имя массивая является ссылкой на первый элемент массива.
    Когда как указатель на имя массива ссылается на первый элемент. Проще говоря.
    char ch[10];
    *ch == ch[0];
    ch == &ch[0]
    Сам же адрес массива извлекается так:
    &ch. //Хотя по сути это адрес первого элемента массива.
    Еще мы присваиваем весь буффер к стрингу, а надо лишь до элемента '\0'
    <code lang="cpp">
    char *strcat_s(char *_string, char _buffer[100]) {
    	for (int i = 0; i < 100; i++) {
    		if (_string[i] == '\0')
    			break;
    		_string[i] = _buffer[i];
    	}
    	return _string;
    }
    </code>

    А вообще, если передаешь в функцию переменную, то передавай ее по ссылке &_string, а лучше в класс запихай.

    В char *setString тоже фигня какая та.
    Сишные функции, плюс ошибка на пустую строку. Я так сделал.
    char *setString(char *_string = (char *)malloc(1)) {
    
    	char _buffer[100];
    	int i, _lenght = 0;
    	_string = '\0';
    
    	cout << "Введите строку:\n";
    
    	cin.getline(_buffer, 100);
    	_lenght += strlen(_buffer);
    	_string = (char *)realloc(_string, _lenght + 1);
    	_string = strcat_s(_string, _buffer);
    
    		//На всякий обнуляю буффер, а то малоли.
    	for (int i = 0; i < 100; i++)
    		_buffer[i] = '\0';
    	return _string;
    }


    Ну и вот примерчик, который делал по книге прата, что бы прояснить ТСу, как работают ссылки, указатели и т.п.
    int main() {
    	int * a;
    	int * b;
    	char buffer[1000]; //буффер на 1000 байт
    	a = new (buffer) int;
    	*a = 100;
    	cout << "A = " << *a << endl;
    	cout << "Address A=" << a << endl;
    	b = new (buffer) int;
    	cout << "B = " << *b << endl;
    	cout << "Address B=" << b << endl;
    	*b = 99;
    	cout << "A = " << *a << endl;
    	cout << "B = " << *b << endl << endl;
    	cout << "Address A=" << a << endl;
    	cout << "Address B=" << b << endl << endl;
    	char * ch = new (buffer) char;
    	cout << "init char ch \n";
    	cout << "CH = " << ch << endl;
    	ch = "Hello World I am buffer ";
    	cout << "CH = " << ch << endl;
    	cout << "A = " << *a << endl;
    	cout << "B = " << *b << endl << endl;
    
    	cout << "Address A=" << a << endl;
    	cout << "Address B=" << b << endl;
    	cout << "Address CH=" << &ch << endl << endl;
    
    	cout << "init float f \n";
    	float * f = new (buffer) float;
    	cout << "F = " << *f;
    	*f = 3.14;
    	cout << "F = " << *f << endl;
    	cout << "CH = " << ch << endl;
    	cout << "A = " << int(*a) << endl;
    	cout << "B = " << int(*b) << endl << endl;
    
    	cout << "Address A=" << a << endl;
    	cout << "Address B=" << b << endl;
    	cout << "Address F=" << f << endl;
    	cout << "Address CH=" << &ch << endl << endl;
    
    
    	// Адресация массивово.
    	cout << "*ch		=" << *ch
    		<< "\n ch		=" << ch
    		<< "\n &ch		=" << &ch
    		<< "\n &ch[0]		=" << &ch[0]
    		<< "\n *ch == ch[0]. ch == &ch[0]";
    	system("pause");
    	return 0;
    Ответ написан
    3 комментария