2012-05-06 53 views
2

我需要輸入多於10000個整數,小於最大長度,直接放入控制檯。控制檯使用getline(cin,string)接受超過9000個的東西。逐個輸入它們會顯着減慢我的程序。無論如何,我可以重寫控制檯的getline最大輸入嗎?從C++的控制檯輸入一個大的輸入

[編輯成包括OP的評論:]

#include <iostream> 
using namespace std; 
int main() 
{ 
    long long n=0,i=0,a,b; 
    cin>>n; 
    for(i=0;i<n;i++) { cin>>a>>b; cout<<a+b<<endl; } 
    return 0; 
} 

這段代碼給出了一個「時間超限」錯誤的任務時超過10000個整數輸入。

編輯: 從一個答案改寫的幫助代碼後:

#include <iostream> 

static inline int error(int n) { std::cerr << "Input error!\n"; return n; } 

int main() 
{ 
    long long a,b,n; // number of colours and vertices 

    if (!(std::cin>> n)) { return error(1); } 

    for (int i = 0; i != n; ++i) 
    { 
     if (!(std::cin >> a>>b)) { return error(1); } 
     std::cout << a+b << "\n"; 
    } 
} 

現在,它給了我在測試時的運行時錯誤(NZEC)用10000+整數

編輯2: 我發現了一些能幫助我,但它只是在C#:How to read very long input from console in C#? 找不到在C++

+6

有什麼問題直接'而(給std :: cin >> N){/ *存儲n * /}'循環的標準輸入? 「極其緩慢」是什麼意思?多久時間?發佈一些展示緩慢的代碼。 –

+2

您的代碼違反了輸入讀取的基本規律:您無法檢查輸入操作的返回值。所有其他關於代碼的思考都基本沒有意義,因爲任何事情都可能出錯,而且你甚至不費心去檢查它們。請參閱[本答案](http://stackoverflow.com/a/10467051/596781)瞭解如何閱讀輸入。 –

回答

6

等同默認情況下輸入輸出流是與C stdio函數同步,這使得它們對於算法競賽而言太慢。 Disable synchronization在您的程序開始時:

std::ios::sync_with_stdio(false); 
-1

您可以從文件中獲取輸入。所有你需要做的是重新這樣

if (!freopen("filename.txt", "r", stdin)) { 
    cout << "Could not open file"; 
    return 1; 
} 
long long n=0,i=0,a,b; 
cin>>n; 
for(i=0;i<n;i++) { cin>>a>>b; cout<<a+b<<endl; } 
return 0; 
+0

這個問題是明確的關於閱讀控制檯輸入,什麼將stdin重定向到一個文件實現在這種情況下,你甚至不會從控制檯讀取任何東西。另外,如果你想從文件中讀取,使用fstream,不要重定向stdin ... – KillianDS