Я знаю, что вы, вероятно, gona снова проголосовали за меня, я действительно не понимаю этого, но я действительно застрял в чем-то и не могу понять, что нет такую информацию в любом месте в Интернете, ни в моей книге для курса, поэтому у меня есть это задание, где мне нужно сделать 2 суммы контейнеров, где разница между двумя суммами является самой низкой, поэтому программа выполнена, отлично работает, вычисляя все, в моем назначении:Как сделать цикл while до того, как есть что-то, чтобы читать C++
Пользователь вводит номера строк без номера строки, после чего я делаю всевозможные суммы между ними и нахожу один с наименьшей разницей между ними.
Хорошо, но так, как я написал код, который я использую в то время как (true), чтобы работать с бесконечными тестовыми окнами (как из назначения), и в это время (правда) у меня есть другое while (cin >> (SOMEINT)) петли и оттолкнуть его обратно в векторе, и после того, как он прочитает новую строку, он просто сломает wile и продолжит вычисление.
Однако в нашем тестовом программном обеспечении это дает ошибку времени выполнения, так как после обнаружения некоторых случаев он начинает печатать бесконечность 0 0, поскольку вводить нечего, но while (true) просто продолжается.
Я имею в виду, что я просто хочу сделать так, что до тех пор, пока пользователь ничего не вводит, например, вы входите в 30 50 90, он вернет 80 90, затем за другой запись и так далее.
КОД:
#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;
}
Добро пожаловать на переполнение стека. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
Прочитайте целые строки ('getline'). Читайте о 'stringstream'. (И используйте 'vector' полностью.) – molbdnilo