2013-02-15 2 views
0

위해 나는파일 포인터 이동의 getline

2 
100 
2 
10 90 
150 
3 
70 10 80 

지금, 내가 4 라인 (10 ~ 90) 만 5 라인 (150) 읽기, 파일 포인터까지 읽을 수 있어요 다음 데이터를 입력 파일을 가지고있다 네 번째 줄에 붙어있는 것 같습니다. 난 infile.clear() 그냥 시도했다. 파일 포인터가 올바르게 움직이는 지 확인하거나 다음 줄에 파일 포인터를 놓으려면 어떻게해야합니까? 의견을 보내 주시면 감사하겠습니다.

-Amit

#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main(void) { 

int cases; 
int total_credit=0; 
int list_size=0; 
string list_price; 


//Read file "filename". 

ifstream infile; 
infile.open("A-large-practice.in",ifstream::in); 
if(!infile.is_open()) { 
    cout << "\n The file cannot be opened" << endl; 
    return 1; 
} 

else { 
    cout<<"Reading from the file"<<endl; 
    infile >> cases;  
    cout << "Total Cases = " << cases << endl; 
    int j=0; 

    while (infile.good() && j < cases) { 

     total_credit=0; 
     list_size=0; 

     infile >> total_credit; 
     infile >> list_size; 

     cout << "Total Credit = " << total_credit << endl; 
     cout << "List Size = " << list_size << endl; 
     //cout << "Sum of total_credit and list_size" << sum_test << endl; 

     int array[list_size]; 
     int i =0; 
     while(i < list_size) { 
      istringstream stream1; 
      string s; 
      getline(infile,s,' '); 
      stream1.str(s); 
      stream1 >> array[i]; 
      //cout << "Here's what in file = " << s <<endl; 
      //array[i]=s; 
      i++; 
     } 

     cout << "List Price = " << array[0] << " Next = " << array[1] << endl;   
     int sum = array[0] + array[1]; 
     cout << "Sum Total = " << sum << endl; 
     cout <<"Testing" << endl; 
     j++;  
    }  
} 
return 0; 

} 

답변

1

문제는 당신의 getline에 대한 "라인 종결 자"로 ' ' (공간)를 사용하는 것입니다. 따라서 줄 4의 숫자를 문자열 s으로 읽을 때 첫 번째 숫자는 "10"이고 두 번째 숫자는 "90\n150\n3\n70"이 될 것입니다. 즉, 다음 칸까지의 모든 숫자입니다. 이것은 당신이 원하는 것이 아니라 당신이 파일에있는 당신의 혼란을 가져오고 있습니다. 당신을 최고의 당신이 10이 될 것이다 읽은 다음 수는 7

가 편집

이 문제를 해결하는 가장 쉬운 방법은 없습니다에 아마 사실 당신은 줄에있을 때 당신이 라인 4에 있다고 생각합니다 전혀 getline을 사용하고 바로 입력에서 직접의 int를 읽어

while (i < list_size) 
    infile >> array[i++]; 

이것은 전부 줄 바꿈을 무시하기 때문에 입력뿐만 아니라 한 줄 또는 무작위로 선 사이의 분할에 모든이 될 수 있습니다,하지만 당신은 초기 번호를 가지고 얼마나 많은 숫자를 읽어야하는지 알려주고 있습니다.

+0

당신은 바로 크리스입니다. 무슨 뜻인지 알 겠어. 나는 그것을 피할 수있는 방법이 있는지 궁금 해서요. 벡터를 사용하여 숫자 목록을 포함하는 문자열 줄을 파싱 할 생각입니다. – Amit