2009-04-08 3 views
1

작동하지 내가 내 동안 조건에 대해 거짓 부울 bValue =를 사용할 필요가 있다고 생각 :ifstream object.eof()

char cArray[ 100 ] = ""; 
ifstream object; 
cout << "Enter full path name: "; 
cin.getline(cArray, 100); 
if (!object) return -1 // Path is not valid? This statement executes why? 

ifstream object.open(cArray, 100); 

// read the contents of a text file until we hit eof. 
while (!object.eof()) 
{ 
// parse the file here 

} 

왜 내가 텍스트 파일의 전체 경로 이름을 입력 할 수 없습니다?

eof 때문일 수 있습니다. eof를 에뮬레이트 할 수있는 부울 문에 대한 구문은 무엇입니까?

은 내가 가질 수

while (!object == true) 
{ 
// parase contents of file 
} 
+0

합니다. 실제로 컴파일 한 것을 다시 입력 했습니까? 어쩌면 문제가있는 코드를 복사하여 붙여 넣어야합니다. –

답변

-1

ifstream::open 기능은 파일 이름과 옵션 모드를합니다. 당신은 전체 파일을 읽을 수 있기 때문에, 왜 단지 시작 부분에서 시작되지 : 물론

ifstream obj(cArray); 
if (obj) { // file successfully opened for reading 
    while (obj.good()) { 
     // read in a line at a time 
     string line; 
     getline(line, obj); 
     if (!line.empty()) { // we have something to work with 
      // parse 
     } 
    } 
} 

, 매끈 매끈한 버전 닐 버터 워스로 while 루프 getline을 테스트하는 것입니다.

+0

난 그냥 전체 파일 경로를 읽을 수없는 것 같아요. 사실 eof와 함께 문제가되지 않을 수도 있습니다. – user40120

+0

@lampshade : 버퍼 cArray가 파일 경로에 대해 충분히 큰지 확인하십시오. – dirkgently

+0

이것은 실제로 좋은 생각이 아닙니다. getline이 아무 것도 읽을 수 없더라도 "parse"가 호출됩니다. –

7

텍스트 파일을 읽는 올바른 방법은 eof(), good(), bad() 또는 indifferent() 함수를 사용하지 않아도된다는 점에 유의하십시오. 하나). C (fgets(), feof() 등)도 마찬가지입니다. 기본적으로 이러한 플래그는 getline()과 같은 함수를 사용하여 무언가를 읽은 후에 만 ​​설정됩니다. getline()과 같은 읽기 함수가 실제로 직접 뭔가를 읽었는지 테스트하는 것이 훨씬 쉽고 정확할 가능성이 큽니다.

테스트되지 않음 - 내 컴파일러 업그레이드하려고합니다 : 당신은 어떻게 든 오류를 오버라이드하지 않는 한 당신이하는 C++ 컴파일러에서이 코드를 컴파일하지 않았다

#include <iostream> 
#include <fstream> 
#include <string> 
using namespacr std; 

imt main() { 

    string filename; 
    getline(cin, filename); 

    ifstream ifs(filename.c_str()); 
    if (! ifs.is_open()) { 
     // error 
    } 

    string line; 
    while(getline(ifs, line)) { 
     // do something with line 
    } 
} 
+0

다음 컨디션을 제어하는 ​​senteinal을 사용할 수 있습니까? 귀하의 getline (ifs, line)에 대한 정보가 있습니까? – user40120

+0

"senteinal"이 무슨 뜻인지 이해하지 못합니다 –

+0

http://en.wikipedia.org/wiki/Sentinel_value –

관련 문제