2013-12-10 24 views
7

kullanamazsınız:Ben ' n' kadar okumak cin istiyorum ama ben aşağıdaki biçimde bir metin dosyası var getline'ın

info 
data1 data2 
info 
data1 data2 data3 data4... 

sorundur: olabilecek verilerin sayımı (ve uzunluk) Çok büyük ve getline() kullanıldığında çalışma zamanı sorunlarına neden oluyor. Bu yüzden tüm satırı std::string'a okuyamıyorum.

for(int i=0; i<SOME_CONSTANT ; i++){ 
    string info, data; 

    cin >> info; 

    while(cin.peek() != '\n' && cin >> data){ 
     // do stuff with data 
    } 
} 

Ancak cin.peek() hile yapmadım: Aşağıdaki çalıştı. Bilgi while döngüsündeki verilere okunur ve program işleri karıştırır. Bunu nasıl düzeltebilirim?

+0

std :: string :: max_size' std :: istream :: getline' için ikinci parametre olarak denediniz mi? –

+1

Verilerin boyutu nasıl bir sorun olur? Çizgiler ne kadar? –

+0

150.000 karaktere kadar – Varaquilex

cevap

7

Karakter karakterini okumayı deneyebilirsiniz.

char ch; 
data = ""; 
cin >> std::noskipws; 
while(cin >> ch && ch != '\n') { 
    if (ch == " ") { 
    // do stuff with data 
    data = ""; 
    continue; 
    } 
    data += ch; 
} 
cin >> std::skipws;