2013-08-26 6 views
0

파일에서 텍스트를 읽고 문자열에 추가하는이 함수는 이제 이상한 것은 짧은 텍스트 인 경우 잘 작동한다는 것입니다. 그러나 문자열이 길어지면 문자열이 비어 지므로이 문제를 해결하는 데 도움이됩니다.파일에서 텍스트를 읽는 데 문제가 있습니다.

+0

검사에서 마지막 문자를 제거합니다. – bjackfly

답변

6

1) 루프를 제어하기 위해 eof()을 사용하지 마십시오. getline을 루프 상태에 직접 넣으십시오. 이 작업을 수행하는 데 문제가 있으면 StackOverflow를 검색하십시오.

2) while 루프에는 중괄호가 없으므로 오해의 여지가있는 들여 쓰기에도 불구하고 getline 행만 처리합니다.

3) getline은 개행을 삭제합니다. 마지막 문자열이 잘못 될 것입니다.

4) 실제로보고있는 실제 동작은 getline이 문자열로 반환하는 마지막 항목 만 추가한다는 사실에서 비롯됩니다. 파일에 한 줄의 텍스트가 포함되어 있고 줄 바꿈으로 끝나지 않으면이 방법이 효과가있는 것 같습니다. 행이 더 많지만 개행 문자로 끝나지 않으면 마지막 행만 가져옵니다. 파일이 개행 문자로 끝나는 경우, 잘못된 루프 조건으로 인해 getline에 대한 마지막 호출은 실제로 문자열의 내용이 될 빈 문자열을 제공합니다.

0

파일이 존재하는 경우

while(!filen.eof()) 
{ 
    getline(filen, temp); 
    filString.append(temp); 
} 
0

사용 "() IS_OPEN"와

while(!filen.eof()) 
    getline(filen, temp); 
    filString.append(temp); 

확인할 교체 : 당신은 다른 절을하지 않아도 //

if(! filen.is_open()){...}

... while 루프에는 중괄호가 있어야하며 그렇지 않으면 getline (...) instructio 만 실행합니다. N : 파일이 '\ n을'로 끝나는하지 않는 경우

while(filen.good()) { 
    getline(filen , temp); 
    filString += (temp + '\n'); 
} 

은 데이터가 문자열의 중간에 분산 된 새로운 라인이없는 문자열

관련 문제