2016-11-25 1 views
0

Ich arbeite an einem Projekt für eine Klasse, in der wir nichts außer für Variablendeklarationen und Funktionsaufrufe haben müssen.ifstream var.fail() in der Funktion

Normalerweise prüfe ich für einen in/outfile Ausfall durch diese Zeilen Code im Haupt:

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

Für dieses Projekt jedoch all meine Code in Funktionen eingebettet werden muss. Ich habe eine Funktion void openFile(ifstream& fin, ofstream& fout), die die Namen infile und outfie setzt und sie öffnet.

Die Frage ist, wie schreibe ich eine Funktion, die auf Fehler testen und das Programm auf Fehler beenden würde, aber das Programm nicht schließen.

Zum Beispiel:

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

Mein hangup oder vielleicht mein Missverständnis ist int main() schließt auf einen int-Wert empfangen, das ist, was ich will, wenn ein Fehler ist, die in/out-Datei beim Öffnen, aber ich tun nicht wollen, dass meine file_failure() einen int zu main zurückgibt und das Programm schließt, wenn der I/O gut ist.

Wieder kann ich absolut keinen Code neben var Deklarations- und Funktionsaufrufen im Wesentlichen für dieses Projekt haben.

-Danke Josh

+0

Definieren Sie "beenden ..., aber nicht das Programm schließen". –

+0

Das Programm wird geschlossen *, wenn main zurückkehrt *. Nicht wenn etwas anderes zu Main zurückkehrt. – immibis

Antwort

2

Ich möchte darauf hinweisen, dass Ihre Aussage terminate the program on fail, but not close the program. mit sich selbst widersprüchlich.

Wenn ich jetzt verstehe, was Sie sagen wollen, würde ich die Ausnahmesicherheit dafür verwenden.

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; 
} 

Weitere Informationen zum Exit-Status finden Sie unter here.

+0

Danke, ich werde mich darum kümmern, ich bin in einem Intro zum Programmieren und wir haben noch keine Ausnahmen bekommen, also versuchen, werfen und fangen sind mir fremd. Ich werde es für meinen eigenen Vorteil betrachten, aber die Ausnahmebehandlung kann nicht in main sein, main muss komplett leer sein, außer für Funktionsaufrufe und var Deklaration. Ich habe die Anweisung nicht sorgfältig genug gelesen, was ich sagen wollte, war "wenn die I/O fehlschlägt, das Programm zu beenden, sonst fortfahren." –

+1

@JoshuaGahan in diesem Fall, warum machst du nicht einfach 'if ((fin. fail()) || (fout.fail())) exit (1); 'du könntest die ausnahmesicherheit vermeiden thingy – solti

+0

Ja, ich mach das dann, danke, ich wusste nicht über exit() wir haben beendete nur ein Programm, indem es 0 zurückgab oder 1 zurückgab, wenn es einen Fehler gab. –