2011-03-26 2 views
1

열려있는 입력 파일 스트림이 있습니다. 다른 파일 (txt 파일)을 성공적으로 열 수 있습니다. 그리고 바로 아래의 코드를 조정하여 다른 txt 파일 (모든 ASCII 문자, 문자 만)을 읽고 출력 할 수 있습니다. 그러나, 나는 아래의 기능으로 놀고 있었다. 실제로 3 라인이있을 때 한 라인이 읽혀집니다. 나는 을 알고 싶어 왜. 배열의 크기는 문제가되지 않습니다. 즉, 크기를 크게하면 아무 것도 수정하지 않는 것입니다. 반면. C++에서 열린 파일 스트림이있는 .get 함수

void DispFile(fstream& iFile) 
{ 
    auto char fileChar[256]; 


    while (inFile.getline(fileChar,256)) 
    { 
    cout << fileChar; 
    cout << endl; 
    } 
} 

정도

void DispFile(fstream& iFile) 
{ 

    char file; 

    while (inFile.get(file) 
    { 
    cout << file; 
    } 

} 

을 한 줄에 inFile.get (어레이 사이즈) 결과를 이용하여 판독되는 않는 이유 : 여기

void DispFile(fstream& iFile) 
{ 
    auto char fileChar[256]; 

    while (inFile.get(fileChar,256)) 
      {         

      cout << fileChar; 

      } 

} 

작동 코드 인 다른 사람들은 매력처럼 작동합니다 (말하자면).

+0

코드가 잘된 것 같습니다. "단 한 줄만 읽는 중입니까?"라는 의미는 무엇입니까? – templatetypedef

답변

4

첫 번째 버전에서 .get(array,size)은 구분 문자까지 문자를 추출합니다. 기본적으로 이것은 개행 문자 '\ n'입니다. 그러나 일단이 문자에 도달하면 입력 스트림에서 추출하지 않고 다음 입력 시도를 위해 남겨 둡니다. 따라서 다음 번에 get()으로 전화하면 이전 get()에서 줄 바꿈을 찾아 즉시 중지합니다.

.getline()은 파일 끝까지 각 문자를 한 번에 하나씩 가져 오기 때문에 줄 바꿈 문자와 .get이 추출되기 때문에 작동합니다.

0

get (char *, int)는 구분 기호 ('\ n')까지 읽지 만 추출하지 않으므로 "붙어"있습니다. getline이 그것을 제거합니다.