2016-05-20 9 views
0

Ich wurde aufgefordert, ein Programm zu erstellen, das die Zeile jedes Mal ausgeben muss, wenn die Textdatei '@' enthält. Das ist mein Code, es muss eine verschachtelte Schleife haben. Warum druckt das Programm die Textdatei nicht? Ist da ein Fehler, den ich gemacht habe? Vielen Dank!Eingabedatei wird nicht ausgegeben? For Loop

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

int main() 
{ 
ifstream fin; 
string I; 
string D="filecontainingemails.txt"; 

cout <<"Enter input filename [default: fileContainingEmails.txt]: "; 
getline (cin, I); 
fin.open(I.c_str()); 
if (I.empty()) 
    {I=D;} 

while (true) 
{ 
    if (!fin.good()) break; 
    string linefromfile; 
    getline(fin, linefromfile); 
    for (int i=0; i<linefromfile.length(); i++) 
    { 
     if(linefromfile[i] == '@') 
      cout << linefromfile <<endl; 
    } 
} 
fin.close(); 

string J; 
string E="copyPasteMyEmails.txt"; 
cout <<"Enter output filename [default: copyPasteMyEmails.txt]: "; 
getline (cin, J); 

if (J.empty()) 
    {J=E;} 
} 
+0

wo kopieren Sie die Wörter in eine Datei ??? Sie drucken nur mit "cout" – piyushj

+0

innerhalb der for-Schleife sollte es nicht die Textdatei an die Eingabeaufforderung drucken? – xamfifa

+0

Bitte geben Sie die Beispieleingabe, die gewünschte Ausgabe und die tatsächliche Ausgabe an. – piyushj

Antwort

0

Diese Codezeilen:

cout <<"Enter input filename [default: fileContainingEmails.txt]: "; 
getline (cin, I); 
fin.open(I.c_str()); 
if (I.empty()) 
    {I=D;} 

Sie derzeit einen Dateinamen von dem Benutzer erhalten, dann versuchen Sie es zu öffnen. Wenn der Benutzer danach eine leere Zeichenfolge eingegeben hat, ändern Sie den Dateinamen. Das ist zu spät, da die geöffnete Datei bereits fehlgeschlagen ist.

Verschieben Sie einfach die Datei geöffnet, um nach der Änderung auf den Standardwert zu sein. Ändern Sie es in etwa so:

cout <<"Enter input filename [default: fileContainingEmails.txt]: "; 
getline (cin, I); 
if (I.empty()) 
    {I=D;} 
fin.open(I.c_str()); 
+0

oh yeah! Ich hätte das offene in den Boden legen sollen. Es gibt schließlich ein! Eine Frage: if (linefromfile [i] == '@') funktioniert dieser Code um zu erkennen ob in jeder Zeile ein "@" Zeichen steht und es ausdrucken? weil meine aktuelle Ausgabe nur die ganze Textdatei ist. Vielen Dank! – xamfifa

+0

Es sollte funktionieren, hast du Zeilen ohne '@' Zeichen. Beachten Sie, dass es mehrere Male gedruckt wird, wenn die Zeile mehrere '@' Symbole enthält, die möglicherweise oder nicht sein können. –

+0

Die Eingabeaufforderung sagt eigentlich zu "Wenn eine Zeile das Zeichen enthält @ more als einmal, sollte es einmal für jeden gedruckt werden. Wenn eine Zeile kein @ enthält, sollte sie NICHT gedruckt werden. "Daher bin ich verwirrt, warum meine Ausgabe nur die unveränderte Textdatei ist. – xamfifa