2014-09-21 3 views
2

정수를 포함하는 여러 파일 (각 줄마다 하나씩)을 읽고이를 정렬 한 후 출력 텍스트 파일로 병합해야하는 할당이 있습니다. 나는 C++을 처음 사용하므로 모든 것이 어떻게 작동하는지 알지 못합니다. 프로그램을 두 개의 .txt 파일로 테스트하고 있습니다. 첫 번째 파일은 fileone.txt라고하는데, 1,2,7을 포함하고 있습니다 (형식을 지정하는 방법을 모르지만 다른 행에 모두 있습니다). 두 번째 파일은 filetwo.txt이며 1,3,5, 9,10 (다시 모든 정수가 다른 행에 있음).ifstream을 사용하여 텍스트 파일의 정수 인쇄

두 파일을 모두 열고 내용을 인쇄하는 다음 코드를 작성했습니다.

#include <iostream> 
#include <fstream> 
using namespace std; 

int main(int argc, char** argv) { 

    ifstream iFile; 
    ifstream jFile; 
    iFile.open("fileone.txt"); 
    jFile.open("filetwo.txt"); 

    int int1 = 0; 
    int int2 = 0; 
    if (iFile.is_open() && jFile.is_open()){ 


     while (iFile.good() || jFile.good()) { 

      iFile >> int1; 
      jFile >> int2; 

      cout << "From first file:" << int1 << endl; 
      cout << "From second file:" << int2 << endl; 

     } 
    } 

    iFile.close(); 
    jFile.close(); 

    return 0; 
} 

이 프로그램의 출력은 오전 데 문제가 첫 번째 파일의 마지막 번호가 여러 번 인쇄됩니다입니다 enter image description here

입니다. 원하는 출력은 파일에서 마지막 정수를 인쇄 한 후 인쇄를 중지하는 것입니다. 이 문제는 두 번째 파일에 첫 번째 파일보다 더 많은 정수가 포함 된 경우에만 나타납니다. 첫 번째 파일이 끝날 때 인쇄를 중지하고 두 번째 파일의 모든 번호를 계속 인쇄하는 방법이 있습니까?

while (iFile.good() || jFile.good()) { 
    iFile >> int1; 
    jFile >> int2; 
    int c = iFile.peek(); 
    int d = jFile.peek(); 
    if (c == EOF) { 
     if (!iFile.eof()) 
     cout << "From first file:" << int1 << endl; 
    } 
    if (d == EOF) { 
     if (!jFile.eof()) 
     cout << "From second file:" << int2 << endl; 
     } 
    } 

것은 파일의 끝을 확인하고 인쇄 할 경우 처리하는 것입니다 따를

답변

6

이 트릭 당신이 성공적으로 읽은 있는지 확인하는 경우에만 실제로 데이터를 사용한다

while (iFile || jFile) { 

     if(iFile >> int1) // make sure the read succeeded!! 
      cout << "From first file:" << int1 << endl; 

     if(jFile >> int2) // make sure the read succeeded!! 
      cout << "From second file:" << int2 << endl; 
    } 

할 것입니다.

+0

아, 네. 그것은 나의 대답에서 언급 된 것처럼 훨씬 더 나은 숙어이다. –

0

동안 루프를 변경하는 것이 좋습니다. 위와 같이 eof() 기능을 사용할 수 있습니다.

코드를 확인하지 않았습니다. 그러나 논리가 정확해야합니다.

+2

불필요하게 복잡합니다. – P0W

+0

@Nabin 진짜 필수 요소는 아닙니다. 아직도 너무 복잡합니다! –

관련 문제