파일 입력에 대한 스트림 상태 테스트: 이중 읽기 방지
파일에서 데이터를 읽을 때 같은 줄을 여러 번 읽는 것을 피하는 것이 중요합니다. 타임스. 그러나 읽기 전에 good() 또는 !eof()와 같은 스트림 상태를 확인하면 예기치 않은 동작이 발생할 수 있습니다.
다음 코드를 고려하세요.
ifstream f("x.txt"); string line; while (f.good()) { getline(f, line); // Use line here. }
이 코드는 모든 줄을 읽는 데 사용됩니다. 파일에서 끝에 도달할 때까지. 그러나 마지막 줄을 두 번 읽습니다. 그 이유를 이해하려면 스트림 상태 플래그의 내부를 조사해야 합니다.
스트림 상태 플래그
good(), eof(), failure() 및 bad()는 입력 스트림의 현재 상태를 나타내는 스트림 상태 플래그입니다. good() 플래그는 일반적으로 스트림이 추가 읽기에 유효한 상태인지 여부를 나타내는 것으로 예상되지만 엄밀히 말하면 정확하지는 않습니다. 오류가 없거나 파일 끝의 조건이 없다는 것이 더 정확하게 설명됩니다.
good() 및 !eof()의 문제
스트림을 확인할 때 .good() 또는 !stream.eof() 읽기 전에 다음 읽기 작업이 성공할지 스트림에 묻지 않습니다. 현재 상태만 쿼리하고 있습니다.
예를 들어 파일에서 마지막 줄을 읽으면 eof() 플래그가 설정됩니다. 그러나 good() 플래그는 여전히 true일 수 있으며, 이는 마지막 읽기 중에 오류가 발생하지 않았음을 나타냅니다.
해결책
이중 읽기를 방지하려면 올바른 접근 방식은 다음과 같습니다. 읽기 작업 후 스트림을 테스트합니다.
// Read all lines from a file for (std::string line; getline(f, line);) { process(line); } // Read an integer and store it in foo int foo; if (f >> foo) { use(foo); } else { handle_error(); }
이 접근 방식을 사용하면 스트림에서 성공적으로 읽은 데이터만 처리할 수 있습니다. 파일.
위 내용은 C 파일 입력 스트림을 사용할 때 이중 읽기 줄을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!