Как сделать цикл while, пока что-то не будет восстановлено Stack Overflow

Я знаю, что вы, вероятно, снова проголосуете за меня, я действительно не понимаю этого, но я действительно кое-что застрял и не могу понять, такой информации нет ни в сети, ни в моей книге для курса, поэтому я у меня есть это назначение, где мне нужно сделать 2 суммы контейнеров, где разница между 2 суммами самая низкая, так что программа выполнена, работает отлично, все рассчитывается, однако, в моем назначении:

Пользователь вводит в одну строку unkwonw длины чисел, поэтому после этого я делаю все виды сумм между ними и нахожу одну с наименьшей разницей между ними.

Хорошо, но так, как я написал код, я использую один while (true), чтобы работать с бесконечными тестовыми сценариями (как из присваивания), и в этом while (true) у меня есть другой цикл while (cin >> (SOMEINT)) и проталкиваю его обратно в вектор, и после того, как он читает новую строку, он просто ломает строку и продолжает вычисление.

Однако в нашем тестовом программном обеспечении это выдает ошибку времени выполнения, поскольку после обнаружения некоторых случаев запускается печать бесконечности 0 0, так как вводить нечего, а while (true) просто продолжается.

Я имею в виду, что я просто хочу сделать так, чтобы, пока пользователь вводит что-то, например, вы вводите 30 50 90, он возвращает 80 90, затем wiat для другой записи и так далее.

КОД:

 #include <iostream>
#include <string>
#include<vector>
#include <sstream>
#include <cmath>
#include <string.h>
#include <stdio.h>
#include <climits>

using namespace std;

const int length = 17000;
int power(int x){
int sum =2;
for(int i = 0;i<x;i++)  {
sum *= 2;
}
return sum;
}
bool ison(int i,int x)
{
if((i>>x) & 1)return true;
return false;
}
int main()
{while(true){
vector<int> Vec;
int cur = 0;
while (cin >> cur) {

Vec.push_back(cur);
if (cin.get() == '\n') {
break;
}
}

int * sumOfarr1 = new int[length];
int * sumOfarr2 = new int[length];

for(int i = 0; i<length;i++){
sumOfarr1[i] = 0;
}
for(int i = 0; i<length;i++){
sumOfarr2[i] = 0;
}
int index=0;for(int i=1;i<length;i++)
{
for(int j=0;j<Vec.size();j++)
{
if(ison(i,j))
{
sumOfarr1[index]+=Vec[j];

}
else
{
sumOfarr2[index]+=Vec[j];

}
}index++;
}
int ans=INT_MAX;
int ii;
for(int i=0;i<index;i++)
{
if(abs(sumOfarr1[i]-sumOfarr2[i])<ans)
{
ii=i;
ans=abs(sumOfarr1[i]-sumOfarr2[i]);
}
}
if(sumOfarr1[ii]<sumOfarr2[ii]){
cout << sumOfarr1[ii] << " " << sumOfarr2[ii];
}
else{
cout << sumOfarr2[ii] << " " << sumOfarr1[ii];
}

cout << endl;
delete[] sumOfarr1;
delete[] sumOfarr2;
Vec.clear();

}

return 0;
}

-4

Решение

Да, я нашел решение, используя только getline и stringstream.

иначе это

    vector<int> Vec;

string line;
while(getline( cin, line ))
{
istringstream iss( line );
int number;
while( iss >> number )
Vec.push_back(number);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]