2013-06-19 2 views
6

난 그냥 내 시험을 개정하고있어 주위에 내 머리를 얻을 수없는 우리의 강사가 제공하는 다음왜 파일을 먼저 읽은 다음 확인 하시겠습니까?

당신이 열이 있는지 확인하거나

  • 그 전에 읽을 수 없습니다,하는 fstreams을 열어 당신이 전에 읽을 선택하면 당신은 추가 원하지 않는 입력

으로 끝낼 수 input_file.fail()

  • 확인

    먼저 읽는 것이 나에게 의미가 없으므로 먼저 확인해야하지 않습니까? 사람이 설명 할 수있는 경우

    , 나는

  • 답변

    10

    input_file.fail()는 이전 작업이 실패한 경우 작업이 실패 할 것입니다 여부를 결정 : 매우 감사하게 될 것입니다. 따라서, 당신이 쓰는 경우이 :

    if (!input_file.fail()) { 
        int value; 
        input_file >> value; 
    
        /* ... process value ... */ 
    } 
    

    그런 value를 읽은 후, 당신은 당신이 실제로 성공적 여부 아무것도 읽을 수 있는지 전혀 모른다. 아시다시피 바로 전에을 읽으 셨습니다. 모든 것이 올바르게 작동하고있었습니다. 파일의 끝에 도달했거나 파일의 데이터가 정수가 아니기 때문에 정수를 읽지 못했을 가능성이 큽니다. 한편

    , 당신은

    int value; 
    input_file >> value; 
    
    if (!input_file.fail()) { 
        /* ... process value ... */ 
    } 
    

    를 작성하는 경우는 다음 당신은 읽기을 시도합니다. 성공하면 읽은 값을 처리합니다. 그렇지 않은 경우 마지막 작업이 실패했다는 사실에 대해 대응할 수 있습니다.

    는 (이보다 더 귀엽 될 수 있습니다.

    하나에 읽기 및 테스트 작업을 결합
    int value; 
    if (input_file >> value) { 
        /* ... process value ... */ 
    } 
    

    그것은 당신이 읽기가 성공했음을 확인하고 있다는 여기보다 명확합니다.)

    하는 경우 당신은 루프에서이 작업을 수행 할 수있는 매우 깨끗한 방법은 읽기하고있는

    for (int value; input_file >> value;) { 
        /* ... process value ... */ 
    } 
    

    이 명확하게 당신이 파일에서 읽기 값을 유지할 수있는 동안 당신이 루프가.

    희망이 도움이됩니다.

    +0

    예! 그것은 모두 의미가 있습니다. 그런 다음 실패하면 파일, 오류 메시지 등을 지우시겠습니까? 감사합니다. – jewfro

    +0

    @ jewfro- 네, 맞아요! – templatetypedef

    +0

    if와 loop에 대한 바로 가기는'>> '연산자가 스트림에 대한 참조를 반환하고 스트림의'bool' 연산자가'fail'을 호출하기 때문에 작동합니다. –

    관련 문제