2009-05-20 6 views
1

Ich fordere den Benutzer nach einem Dateinamen, wenn sie beim ersten Mal einen gültigen Dateinamen eingeben, funktioniert es. Wenn es jedoch beim ersten Mal ungültig wird, schlägt jede andere Überprüfung fehl. Wie würde ich das beheben? Sagen wir, sie geben nur ein Verzeichnis an, wie würde ich die Namen aller Textdateien erhalten und wie viele davon?Einen Benutzer nach dem Dateinamen oder dem Verzeichnis fragen

int main() { 

    ifstream inFile; 
    int result; 
    string filename; 

    cout << "If the executable is not in the same directory as the\nfile, then a directory needs to be provided\n\n"; 
    while (true) { 
     cout << "Enter the file name: "; 
     getline(cin, filename); 
     inFile.open(filename.c_str(), ios::in); 

     if (!inFile) 
      cout << "\n**File failed to open**\n\n"; 
     else break; 
    } 

    result = countLOC(inFile); 
    cout << "\nThere are " << result << " lines of code in \"" << filename << "\"\n\n"; 

    inFile.close(); 
    return 0; 
} 

Antwort

3

Dies liegt daran, dass die Fehlerbits im Objekt 'inFile' gesetzt wurden.
Sie müssen die Fehlerbits zurücksetzen, bevor Sie etwas anderes tun.

if (!inFile) 
{ 
    cout << "\n**File failed to open**\n\n"; 
    inFile.clear(); 
} 
else break; 
3

Anruf clear den Zustand vor dem Aufruf zum Zurücksetzen zu öffnen.

0

Sie brauchen nicht wirklich Verwendung der Fehlerflags usw. zu machen, können Sie nur für die Überprüfung der inFile.is_open() Funktion aufrufen. Sie müssen inFile.clear() auch nicht verwenden.

0

Ja tun, um ein klares

, wenn der Benutzer ein Verzeichnis, die Sie benötigen und Findfirst Findnext

msdn.microsoft.com/en-us/library/zyzxfzac(VS.71).aspx

zu tun

und verarbeiten Sie alle Dateien auf diese Weise.

0

Löschen Sie es. Auch brauchen Sie nicht die Pause in Ihrer Schleife, würde ich stattdessen vorschlagen:

do { 
    if (infile.fail()) 
     cout << "\n**File failed to open**\n\n"; 
    infile.clear() 
    cout << "Enter the file name: "; 
    getline(cin, filename); 
    inFile.open(filename.c_str(), ios::in); 
} while(!infile) 
Verwandte Themen