2012-07-12 2 views
2

코드 :fstream get (char *, int) 빈 줄을 어떻게 조작합니까? strfile.cpp에서

#include <fstream> 
#include <iostream> 
#include <assert.h> 

#define SZ 100 

using namespace std; 

int main(){ 
char buf[SZ]; 
{ 
    ifstream in("strfile.cpp"); 
    assert(in); 
    ofstream out("strfile.out"); 
    assert(out); 
    int i = 1; 

    while(!in.eof()){ 
     if(in.get(buf, SZ)) 
      int a = in.get(); 
     else{ 
      cout << buf << endl; 
      out << i++ << ": " << buf << endl; 
      continue; 
     } 
     cout << buf << endl; 
     out << i++ << ": " << buf << endl; 
    } 
} 
return 0; 
} 
나는 모든 파일 을 조작하려는

하지만 strfile.out에서 : 그 fstream.getline 알고

1: #include <fstream> 
2: #include <iostream> 
3: #include <assert.h> 
4: ...(many empty line) 

(숯불 *를, int)에이 기능 할 수 그것을 관리 할 수 ​​있지만, 이것을 수행하는 방법을 알고 싶습니다. "fstream.get()"함수를 사용하십시오.

+0

당신이 "어떻게 작동"무엇을 의미합니까? 빈 줄을 무시 하시겠습니까? 빈 줄에 코드가 없습니까? – user7116

+0

불쌍한 영어에 대해 유감입니다. 빈 줄이 생기면 줄 번호로 출력하십시오. – lanmezhe

+0

파일을 복사하고 각 줄 또는 100 자 이후에 줄 번호를 삽입하려는 경우 둘 중 먼저 발생하는 것입니다. 당신은 당신의 문제에 대해 더 구체적으로 말할 수 있습니까? – molbdnilo

답변

1

ifstream::get(char*,streamsize)은 스트림에 구분 기호 (이 경우 \n)를 남기므로 통화가 진행되지 않으므로 끝없이 빈 줄을 읽는 호출 프로그램에 나타납니다. 이 in.get() 또는 in.ignore(1)를 사용하여 과거

대신 당신은 개행 문자를 스트림에서 기다리고 있는지 확인해야하고, 이동 :

ifstream in("strfile.cpp"); 
ofstream out("strfile.out"); 

int i = 1; 
out << i << ": "; 

while (in.good()) { 
    if (in.peek() == '\n') { 
     // in.get(buf, SZ) won't read newlines 
     in.get(); 
     out << endl << i++ << ": "; 
    } else { 
     in.get(buf, SZ); 
     out << buf;  // we only output the buffer contents, no newline 
    } 
} 

// output the hanging \n 
out << endl; 

in.close(); 
out.close(); 
+0

고마워, getline()이 할 수 있다는 것을 알고있다. 이 작업을 수행하는 방법을 알고 싶습니다. get() 만 사용하십시오. – lanmezhe

+0

@lanmezhe : 이제 알았습니다. 내 예를 업데이트했습니다. – user7116

+0

감사합니다. 작동합니다! 문제는 get (buf, SZ)이 빈 줄을 읽을 때 프로그램이 잘못되었다고 생각합니다. 그게 맞습니까? – lanmezhe