2016-11-25 1 views
0

변수 선언과 함수 호출을 제외하고는 main에서 아무것도 가져야하는 클래스를위한 프로젝트에서 작업하고 있습니다.ifstream var.fail() in function

보통 나는 주에서 코드 줄에 의해에서/OUTFILE 실패를 확인 :

if((inFile.fail()) || (outfile.fail()) 
{ 
    cout << "File I/O Failure"; 
    return 1; 
} 

그러나 내 모든 코드가 함수에 포함 할 필요가이 프로젝트를 위해. 기능이 void openFile(ifstream& fin, ofstream& fout)infileoutfie 이름을 설정하고 열립니다.

질문은 실패를 테스트하고 실패시 프로그램을 종료하지만 프로그램을 종료하지는 않는 함수를 작성하는 방법입니다. 예를 들어

:

int file_failure(ifstream& fin, ofstream& fout) 
{ 
    if((fin.fail()) || (fout.fail())) 
    { 
     return 1; 
    } 
    else 
    { 
     // don't return a value. 
    } 
} 

내 끊기 아니면 내 오해 int main() 내가 IN/OUT 파일을 여는 오류가있을 경우 원하는 것입니다 int 값을 수신에 닫습니다,하지만 난 할 내 file_failure() int int int 반환하고 I/O 좋은 경우 프로그램을 닫고 싶지 않습니다.

다시이 프로젝트의 주 변수 선언과 함수 호출을 제외하고는 절대 코드를 사용할 수 없습니다.

고마워요 조쉬

+0

"종료 ..., 프로그램을 닫지 않음"을 정의하십시오. –

+0

main이 *를 반환하면 프로그램이 종료됩니다. 다른 일이 메인으로 돌아 왔을 때. – immibis

답변

2

나는 당신의 문 terminate the program on fail, but not close the program.가 자체 모순이라고 지적하고 싶습니다.

지금까지 내가 말하고자하는 바를 이해한다면 예외적 인 안전을 사용할 것입니다.

int file_failure(ifstream& fin, ofstream& fout){ 
    if((fin.fail()) || (fout.fail())) throw std::runtime_error("File I/O Failure"); 
    else 
    { 
     // don't return a value. 
    } 
    return val; // what ever you want to return 
} 

int main(){ 
    try { 
     file_failure(fin, fout); 
    }catch(std::exception& e){ 
     // control reach here if file_failure throw exception 
     std::cout << e.what() << std::endl; 
     exit(1); // the parameter to exit function gives the Exit Status 
        // this exit function terminates your program 
    } 
    return 0; 
} 

는 종료 상태 here 자세한 내용을 참조하십시오.

+0

감사의 말씀을 드리겠습니다. 저는 프로그래밍에 대한 소개를하고 있습니다. 아직 예외에 빠지지 않았으므로, 시도하고 던지며 잡는 것이 내게 외국적입니다. 내 자신의 이익을 위해 그것을 살펴볼 것이지만 예외 처리는 main에있을 수 없으며, main 함수 호출과 var 선언을 제외하고 완전히 비워야한다. 나는 성명서를 충분히 신중하게 읽지 않았다. "I/O가 프로그램을 종료하지 못하면 그 밖의 프로그램이 종료된다." –

+1

@JoshuaGahan 그럴 경우 왜'if ((fin. 예외 안전성을 피할 수 있습니다. – solti

+0

그래, 내가 그걸 할거야, exit()에 대해 몰랐어. 고맙다. 오류가있는 경우 0을 반환하거나 1을 반환하여 프로그램을 종료했습니다. –