Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
1

функция с инкрементом объекта. ++

22.06.2011, 14:04. Показов 2055. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Прошу помочь в реализации функций.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
static COORD Coordinate;
 
Coordinate.X = 0;
 
// создаем функцию для инкремента объекта COORD (думаю не верно)
void PointIncrement(COORD Point)
{
    ++Point.X;
    SetConsoleCursorPosition(hConsole,Point);
    cout << "Point";
}
 
void main()
{
    while(1)
    {
        PointIncrement(Coordinate); 
        Sleep(100);
    }
     
}
Каждые 0.1 сек "Point" должен передвигаться направо.
Но тут инкремент только на один шаг срабатывает и виснет.
Как правильно должна выглядеть функция?
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2011, 14:04
Ответы с готовыми решениями:

Помогите чайнику с инкрементом...
Здравствуйте! Понимаю, конечно, что вопрос наверное дурацкий... но я только начал знакомство с С++,...

Скобки не работают с постфиксным инкрементом
Почему скобки не работают с постфиксным инкрементом ? Программа должна вывести 1, а выводит 0. Без...

Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах
Можете объяснить разницу между i++ и ++i на просто примере с цифрами?

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

15
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
22.06.2011, 14:23 2
Переменная Point передаётся по значению, поэтому все изменения пропадают при выходе из функции.
попробуй по ссылке передать
C++
1
void PointIncrement(COORD &Point)
1
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:32  [ТС] 3
Большое спасибо, а можешь в теорий объяснить что к чему?
А то я хочу понять, почему с простыми типами изменения не проподают, а с объектами удаляются?
А можете тоже самое реализовать с помощью указателей? (у меня не совсем верно получается)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
22.06.2011, 14:35 4
vendeme, С простыми тоже пропадают.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
static COORD Coordinate;
 
Coordinate.X = 0;
 
// создаем функцию для инкремента объекта COORD (думаю не верно)
void PointIncrement(COORD* Point)
{
        ++Point->X;
        SetConsoleCursorPosition(hConsole,*Point);
        cout << "Point";
}
 
void main()
{
    while(1)
    {
        PointIncrement(&Coordinate); 
        Sleep(100);
    }
     
}
1
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:46  [ТС] 5
Хм, проверил, и в правду так.
Я конечно ссылки не очень изучал, но:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void test(int t)
{
    t++;
}
void main()
{
    int x = 1;
    while(1)
    {
        test(x);
        cout<<x;
        Sleep(50);
    }
}
while(1)
{
test(x);
}

почему x не возрастает? По идее же за блок не выходит.
Вроде функция должна просто увеличивать СТАРОЕ число.
..
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
22.06.2011, 14:50 6
При вызове функции test в неё передаётся значение переменной x, и дальше функция изменяет копию переменной x (с именем t) а не саму эту переменную. При выходе из функции копия разрушается, а значение переменной x так никогда и не изменится.
0
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 14:52  [ТС] 7
ааа, тоесть в test нужно return t добавить. Или же просто через &
0
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
22.06.2011, 14:53 8
если очень хочется, что бы переменная изменялась - передавай с использованием &
test ( &x ) {}
есессно функцию так же объявлять с &

Добавлено через 34 секунды
return не будет изменять переменную.
можно завести новую, которая будет принимать значения, возвращаемые функцией
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
22.06.2011, 14:54 9
Можно return, но тогда всё будет выглядеть по другому.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int test(int t)
{
        t++;
        return t;
}
void main()
{
        int x = 1;
        while(1)
        {
                x = test(x);
                cout<<x;
                Sleep(50);
        }
}
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
22.06.2011, 18:11 10
Судя по первому посту переменная COORD Coordinate - глобальная. Зачем вообще что-то куда-то передавать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD Coordinate={0};
 
void PointIncrement()
{
        if(++Coordinate.X==80){
             Coordinate.X=0;
             ++Coordinate.Y;
        }
        SetConsoleCursorPosition(hConsole,Coordinate);
        cout << "Point";
}
 
void main()
{
    while(1)
    {
        PointIncrement(); 
        Sleep(100);
    }
     
}
0
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
22.06.2011, 18:39  [ТС] 11
А если этих объектов у меня МНОГО?
Я создал эту функцию чтобы инкремировать объектЫ.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
22.06.2011, 22:21 12
Лучший ответ Сообщение было отмечено как решение

Решение

vendeme, Товарищ, быдлокодер - это вы. Т.к. вы сами создали глобальную переменную. Вам просто указали как проще работать с глобальной переменной. Глобальные переменные сами по себе зло, особенно там где они не нужны. Запомните.
3
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
23.06.2011, 02:09  [ТС] 13
Я же для примера выложил в виде глобального.
0
silent_1991
23.06.2011, 02:30
  #14
 Комментарий модератора 
vendeme, титулы раздавать заканчивайте, а то будет вам "модератор в ярости".
3
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.06.2011, 10:00 15
vendeme, Человек, пишущий код для примера разве будет использовать то, что не использует в обычной жизни? В таком ключе я могу написать такой код для примера.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main()
{
    int o1 = 10;
    int ol = 5;
    int _ = 0;
what:
    _ += o1 + ol;
    if (_ < 500)
       goto what;
    std::cout << _ << '\n';
}
Ведь тоже код для примера... Правда мне его было противно писать.
0
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
23.06.2011, 17:27  [ТС] 16
ForEveR, Рекомендую тебе разобраться в себе. Конечно, ты это сейчас не воспримешь всерьёз, но через неделю ты это заметишь. (печень..)

Всем огромное спасибо, с проблемой разобрался. Форум отличный, буду обращаться.
0
23.06.2011, 17:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2011, 17:27
Помогаю со студенческими работами здесь

Функция вне класса для передачи функции объекта
Добрый вечер, уважаемые форумчане. Столкнулся с таким пунктом в условии задания: Создать функцию...

Какая функция объекта cin позволяет вставить символ в поток ввода?
Какая функция обьекта cin позволяет вставить символ в поток ввода?Пример,если можно.

replace..select с инкрементом полей
Обложился документацией, но по всей видимости хочу нечто странное.. Вот синтаксис команды update,...

Массив с инкрементом =1 заполнить по спирали
Заполнить массив 100х100 натуральными числами с инкрементом равному единице. Заполнение массива...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru