Проблема в том, что ваша программа зацикливается на втором while-цикле с вводом чисел из стандартного потока ввода (cin), пока не будет достигнут конец файла (EOF). Блокировка ввода происходит после выполнения первого цикла while, который читает все доступные входные числа и сохраняет их в структуре данных set.
Чтобы решить эту проблему, можно использовать другой способ ввода элементов для второго множества, например, можно объявить int массив известного размера и использовать цикл for для заполнения элементов:
int n; // количество элементов второго множества
cin >> n;
int b;
for (int i = 0; i < n; i++) {
cin >> b;
st1.insert(b);
}
Или можно использовать следующую конструкцию вместо второго while-цикла:
cin.clear(); // очищает состояние потока ввода, чтобы снова разрешить ввод
cin.ignore(); // проигнорирует все символы до новой строки или EOF
Полный код с исправлениями:
#include <bits/stdc++.h>
using namespace std;
int main() {
set<int> st;
set<int> st1;
int a, ans = 0, b;
while (cin >> a) {
st.insert(a);
}
cin.clear();
cin.ignore();
while (cin >> b) {
st1.insert(b);
}
for (auto it : st1) {
cout << it << " ";
}
cout << endl;
return 0;
}
Здесь я добавил функцию clear () и ignore() для сброса потока ввода и использовал пробел для разделения выводимых чисел, чтобы получить читаемый вариант для вывода в консоль.
Вот условие, при котором вы можете вводить целые числа в set отличные от нуля #include
using namespace std;
int main() {
int n;
set a;
while (cin >> n, n) a.insert;
set b;
while (cin >> n, n) b.insert;
for (auto x : a) cout
А что, так можно было? while (cin >> a) Условие окончания ввода такое, что если там попадётся не число, то второй цикл не исполнится ни разу (cin >> b вернёт false), st1 останется пустым, и вывод будет пустым.
Какой вообще формат входных данных по постановке задачи?