2014-10-31 2 views
0

저는 초보자이며 학교용입니다.getline() 첫 줄을 읽지 않습니다.

약 28kb 크기의 파일을 읽으려고합니다. 이 프로그램은 작동하지만 처음 41 행은 인쇄되지 않습니다. 그것은 작은 파일로 잘 작동합니다. 처음에는 char 배열을 읽고 문자열로 전환했습니다. ..

어떤 도움을 크게 apreciated 될 것이다

.. 감사 가 나는 또한 로그 버퍼를 변경 시도하지만 분명히 내가이 같은 느낌 그림 그것을 매우 간단하지만, 단지 문이 안 열려 있어야합니다 .. 충분히 커야한다 !

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <string> 
#include <cstdio> 
#include <cerrno> 

using namespace std; 

struct espion 
{ 
    char nom[30]; 
    char pays[20]; 
    char emploi[29]; 

}; 


int main() 
{ 
    const int MAX_NOM = 30, MAX_PAYS = 20, MAX_EMPLOI = 29; 
    char nomFichier[50] = "espion.txt"; 



    ifstream aLire; 
    aLire.open(nomFichier, ios::in|ios::binary); 

    if(!aLire.is_open()){ 
     exit(EXIT_FAILURE); 
    } 


    std::string infoEspion; 


    while(aLire) 
    { 
     infoEspion.clear(); 
     std::getline(aLire, infoEspion); 
     cout << infoEspion ; 

    } 

    aLire.close(); 


    system("pause"); 
    return 0; 

} 
+1

줄 수는 몇 자입니까? 그것들 중 적어도 하나가'std :: string :: max_size()'보다 크면 추출이 실패합니다. – 0x499602D2

+1

'getline'은 제대로 작동하지만'cout'에 인쇄 할 때 일부 문자가 손실 될 수 있습니다. 모든 줄에'infoEspion.size()'를 더하고 파일 크기와 일치하는지보십시오. 그렇다면 getline보다 입력을 정확하게 읽을 수 있습니다. – pts

+1

각 I/O 작업 (열기, getline, 닫기)에 오류가 있는지 확인하고 오류가 발생하면 프로그램을 중단하십시오. 완료되면 I/O 오류가 없음을 명시 적으로 질문을 업데이트하십시오. – pts

답변

0

시스템에서 ("일시 중지"), 이는 Windows에서 실행중인 것 같습니다. ios :: binary를 사용하면 줄 끝 표식은 변환되지 않으며, 따옴표는 <입니다. < infoEspion; 명령문은 모든 "행"이 서로의 위에 쓰여지는 방식으로 "원시"행을 인쇄합니다. (더 구체적으로 말하자면, 각 행은 리턴으로 끝나지만 개행 문자가 없으므로 각 cout 문을 실행 한 후 커서는 같은 행의 시작 부분으로 돌아갑니다.) ios :: binary를 제거하면 모든 매우 긴 하나의 줄에 입력하십시오. 문장을 cout으로 변경하기 < < infoEspion < < endl; 모든 줄을 표시합니다.

관련 문제