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

Программа не выводит ничего; вывод потока пустой после выполнения функции

04.07.2019, 09:49. Показов 4107. Ответов 10

Author24 — интернет-сервис помощи студентам
После выполнения одной функции

у меня ничего не выводится в консоли через std:cout

Main (Rule).CPP

C++
1
2
3
4
5
6
7
std:: vector< std::tuple<int, int,int> > passengers; 
 
elevation.Move_Call(passengers);
 
std::cout << "Nothing " << std::endl;
std::cout << "Appears " << std::endl;
std::cout << "Nothing Appears in this stdout" << std::endl;

Class Elevation.cpp with Move_Call

C++
1
2
3
4
5
    void Elevation::Move_Call(std::vector< std::tuple<int, int, int> >& passengers)
{
    while (passengers.empty() != true) // работает, пока вектор таплов (кортежей) не будет пустой
        El_to_Pass_to_Dest(passengers);
}
Если раскомментировать elevation.Move_Call (passengers); то после него записанные строки будут выводиться.

У самого есть идея, что где-то в самой проге я как-то повлиял на поток.
Вложения
Тип файла: zip Elevation.zip (7.2 Кб, 4 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2019, 09:49
Ответы с готовыми решениями:

Не завершается программа после выполнения потока
Не завершается программа после выполнения второго потока. Я понял, что виноват цикл внутри метода,...

Как избежать уничтожения потока после выполнения им своей функции?
создаю несколько потоков for (int i = 0; i &lt; n; i++) BeeThreads = CreateThread(NULL, 0,...

Почему зацикливается программа после выполнения функции загрузки?
Вот моя функция, после её выполнения программа зацикливается. ITEM* zagruzka(ITEM *head) {...

Программа ничего не выводит
program p1; var s: string; n, i: byte; begin readln (s); readln (n); for i:=1 to length(s) do...

10
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
04.07.2019, 10:08 2
streamc, похоже что цикл в Elevation::Move_Call бесконечный
0
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
04.07.2019, 10:26  [ТС] 3
zayats80888,

Но как выйти из него. Ведь я же поставил условие

Кстати, я убрал из main Elevation::Move_Call пока, а сразу прямо из Main вызываю теперь
C++
1
2
    while (passengers.empty() != true)
        elevation.El_to_Pass_to_Dest(passengers); // Никакого Move_call
Условие есть. Значит, я не так вначале понял про выход. Как бы из этого while корректно выйти. Да, вектор пуст, данные выводятся. Но толку то)) Если я дальше не смогу продолжать
0
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
04.07.2019, 10:31 4
Цитата Сообщение от streamc Посмотреть сообщение
Как бы из этого while корректно выйти.
Нужно что бы функция elevation.El_to_Pass_to_Dest(passengers) в конце концов опустошала вектор passengers
0
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
04.07.2019, 10:31  [ТС] 5
C++
1
2
3
4
    while (passengers.empty() != true) {
        elevation.El_to_Pass_to_Dest(passengers);
        break;
    }
А вот так уже работает.
0
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
04.07.2019, 10:33 6
Цитата Сообщение от streamc Посмотреть сообщение
А вот так уже работает.
это все равно что написать просто
C++
1
if (!passengers.empty()) elevation.El_to_Pass_to_Dest(passengers);
0
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
04.07.2019, 10:33  [ТС] 7
Цитата Сообщение от zayats80888 Посмотреть сообщение
ужно что бы функция elevation.El_to_Pass_to_Dest(passengers) в конце концов опустошала вектор passengers
Вот это она 100 процентов делает, в этом и суть. Я все там дебажил, проверял. Он 100 процентов пуст в любом случае.
Короче, если
C++
1
break;
добавляю, то работает. Такой вот он while.
0
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
04.07.2019, 10:36 8
Цитата Сообщение от streamc Посмотреть сообщение
Такой вот он while.
Я архив с кодом не смотрел, но готов поспорить, что вы вектор в функцию El_to_Pass_to_Dest передаете копированием, вместо того что бы по ссылке. while тут ни причем
0
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
04.07.2019, 11:12  [ТС] 9
Цитата Сообщение от zayats80888 Посмотреть сообщение
это все равно что написать просто
Проверил, да, одноразовое выполнение - отнюдь не то, что мне нужно. Хм может внутри, while в while поставлю что-нибудь типа break, тут уже логику смотреть придется.

Добавлено через 1 минуту
Цитата Сообщение от zayats80888 Посмотреть сообщение
El_to_Pass_to_Dest передаете копированием
По ссылке. Мне же нужно вектор очищать. Никакого копирования. Я изначально хотел сделать только по ссылке. Но еще раз гляну. Идея по ссылке, но исполнение проверю еще раз.

Добавлено через 2 минуты
А, внутри, значит тоже нужно int *ucf0 = &std::get<1>(passengers[0]);
вместо int ucf0 = std::get<1>(passengers[0]);
Нет, не нужно, а то я испорчку элементы во время выполенния программы.

Добавлено через 13 минут
C++
1
2
3
void Elevation::El_to_Pass_to_Dest(std::vector< std::tuple<int, int, int> >& passengers)
 {
}
Так норм? Внутри никаких ссылок, а чисто passengers

Добавлено через 19 минут
Так, в общем, я решил проверить удаление из вектора passengers в main (Rule), если один раз выполнить while не до конца. То есть, используя break.
C++
1
2
     for (const auto &i : passengers)
         std::cout <<"passenger"<< std::get<0>(i) << " " << std::get<1>(i) << " " << std::get<2>(i) << std::endl;
Он нормально удаляет все элементы из оригинального вектора. То есть, проблема не в ссылке. Я же использую везде ссылки в прототипах и области переменных.
0
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
04.07.2019, 11:26 10
Лучший ответ Сообщение было отмечено streamc как решение

Решение

streamc, посмотрел ваш код в архиве, и нашел следующее:
C++
1
2
3
4
5
6
7
8
void Elevation::Load_Users2(std::vector< std::tuple<int, int, int> >& passengers)
{
    for (auto i = passengers.begin(); i != passengers.end();)
 
        if (std::get<0>(*i) == -5555) i = passengers.erase(i);
        else ++i;
    if (passengers.empty() == true) exit(0); // <-----Вот и причина!
}
1
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
04.07.2019, 11:56  [ТС] 11
zayats80888,

Спасибо!
Даже не знаю, как благодарен. Для других вариантов использовал. А, понял exit (0) - это полный выход из программы.

Добавлено через 3 минуты
loaded внутри я типа не очистил в отличие от passengers :HMM:

Добавлено через 14 минут
Тему можно снести с форума.
0
04.07.2019, 11:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2019, 11:56
Помогаю со студенческими работами здесь

Программа не выводит ничего
Собственно начал изучать NASM но у меня не выводится в этой программе ничего global _start ...

Программа ничего не выводит
При компиляции ничего не выводит #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt;...

Программа ничего не выводит
Здравствуйте, помогите, пожалуйста. Программа компилируется нормально, ошибок компилятор не выдает....

После # ничего не выводит
Здравствуйте,есть некая функция ,которая в итоге формирует такую переменную return_ += &quot;#&quot; +...

Пустой список после выполнения метода
Здравствуйте! Есть два метода, после выполнения первого, список, который я объявил List&lt;Video&gt;...

После выполнения цикла ничего не происходит
После выполнения цикла ошибки не выводятся, но и в бд из csv ничего не записывается. Подскажите в...


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

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