2016-12-20 32 views
-4

我知道,你可能會再次戈納投我失望,我真的不明白這一點,但我真的堅持的東西,並不能弄明白,沒有這些信息在網絡中的任何地方都不存在,所以我有這個任務,我需要在兩個總和之間的差值最小的情況下創建2個容器,所以程序完成後可以完美地計算出所有內容,在我的任務:如何使while循環,直到有東西可以讀進來C++

用戶在一行unkwonw長度的數字輸入等以後,我做的所有種類它們之間款項,並找到一個與最低之間的差異。 (真),以便使用無窮大測試用例(來自賦值),並在此while(真)我有另一個(cin >>(SOMEINT)),但是我寫代碼的方式我使用一個while(true)循環並將其推回到一個向量中,並且在它讀取新行之後,只需打破這個錯誤並繼續計算。

但是在我們的測試軟件這一塊給運行時錯誤,因爲發現了一些情況後,然後開始打印無邊0 0,因爲沒有什麼可進入,但同時(真)剛剛還在繼續。

我的意思是我只是想,直到用戶輸入的東西,使這種方式的一方面是,比如你輸入30 50 90將返回80 90,然後WIAT再入境等。

CODE:

#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; 
} 
+3

歡迎堆棧溢出。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –

+3

解決這些問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+0

閱讀整行('getline')。閱讀關於'stringstream'。 (並且一直使用'vector'。) – molbdnilo

回答

0

是的,我發現只是用函數getline和stringstream的解決方案。

又名這

vector<int> Vec; 

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