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

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

04.07.2019, 09:49. Показов 4412. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2019, 09:49
Ответы с готовыми решениями:

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

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

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

10
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
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
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
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
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
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
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
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
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2019, 11:56
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
Django или Flask: что выбрать для веб-разработки на Python
py-thonny 13.03.2025
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации. . .
Непрерывное развертывание в Java с Kubernetes
Javaican 13.03.2025
Чем так привлекателен Kubernetes для развертывания Java-приложений? Этот оркестратор контейнеров позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными. . .
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
run.dev 13.03.2025
JavaScript занимает первые позиции среди языков веб-разработки, но его распространенность делает его привлекательной целью для злоумышленников. Межсайтовый скриптинг (XSS), межсайтовая подделка. . .
PHP 8: JIT-компиляция и улучшение производительно­сти
Jason-Webb 13.03.2025
PHP никогда не славился своей скоростью. Многие сталкивались с проблемами производительности при работе со сложными вычислениями или обработкой больших объемов данных. Традиционная модель выполнения. . .
Сериализация данных с Apache Avro в Kafka
Javaican 12.03.2025
Apache Kafka стала одним из ключевых решений для работы с большими потоками данных. Однако с ростом объемов передаваемых данных возникает проблема: как эффективно сериализовать и десериализовать. . .
Создание потребителей Kafka с помощью Reactor Kafka
Javaican 12.03.2025
Reactor Kafka — это библиотека, объединяющая Apache Kafka с реактивным программированием на базе Project Reactor. Такое сочетание позволяет строить неблокирующие, асинхронные приложения с контролем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер