2012-12-25 4 views
3

getline()을 처음 사용하고 있는데 문제가 있다고 생각합니다. 다음은 내 코드입니다 :visual studio 2012에서 getline() 함수가 다르게 작동하여 마지막 행으로 직접 건너 뜁니다.

ifstream file ("new2.csv"); 
string val; 
while (file.good()) 
{ 
    getline (file,val); 
} 
cout<<val; 

출력에 상관없이 내가 CSV 파일에 얼마나 많은 라인 항상 csv 파일의 마지막 줄입니다.

내 csv 파일은 간단한 구분 파일입니다. 같은 :

cat,dog,a,b,c,hello,world 
monkey,flower,text,word 

난의 getline은 csv 파일의 첫 번째 줄을 읽어하도록되어 생각하지만,이 경우, 내 출력 될 것입니다 : monkey,flower,text,word

이는 CSV의 행의 수와 발생 파일. 이 작업을 수행 할 수있는 작업을 찾을 수 없습니다. 도와주세요. 덕분에 .

+0

당신은 거기 루프 ... 당신이 루핑을 중지 한 후 첫 번째 줄을 읽고 있습니다 무엇을 생각하게있어? – jrok

+0

글쎄, 루프를 돌면서 각 변수를 같은 변수에 집어 넣었다가 이전에 있던 변수를 덮어 쓴 다음 결과를 출력합니다. 너는 무엇을 기대 하느냐? – chris

+0

필자는'while (std :: getline (file, val)) {std :: cout << val;}'으로 가서 전체'good()'부분을 잊어 버릴 것입니다. – chris

답변

2

물론 cout은 루프 외부에서 인쇄하기 때문에 파일에서 마지막으로 읽은 행만 인쇄하고 모든 행을 읽은 후 마지막 행을 인쇄합니다.

는 대신이 작성해야

:

ifstream file ("new2.csv"); 
string val; 
while (file.good()) 
{ 
    getline (file,val); 
    cout<< val << endl; 
} 
+0

ohh .. 고마워 (어리석은! !!) getline을 처음 사용하기 때문에이 문제가 발생했습니다. – misteeque

1
while (file.good()) 
{ 
    getline (file,val); 
} 
cout<<val; 

cout은 루프 외부에 있으므로 마지막 줄만 인쇄합니다.