2016-09-12 2 views
0

Ich versuche, ein C++ - Programm zu machen, das eine bestimmte Zeile in einer Textdatei findet und dann die nächsten 3 Zeilen dieser Datei liest. Aber das Programm endet damit, die gleiche Zeile dreimal zu zeigen. Was könnte eine mögliche Lösung dafür sein? Hier ist mein Code-Fehler beim Lesen der nächsten Zeile aus einer Datei

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    ifstream file("file.txt"); 
    string line; 
    int iffound=0; 
    string inp; 

    cin>>inp; 
    cout << "You have searched for " << inp << endl; 

    while (file.good()) 
    { 
     getline(file,line); 
     if(line==inp){ 
      iffound=1; 
      cout << "Contact Found!" << endl; 
      for(int i=0;i<=2;i++){ 
       cout << line; 
      } 
      break; 
     } 
    } 
    file.close(); 

    if(iffound!=1){ 
     cout << "Contact Not Found" << endl; 
    } 
    return 0; 
} 

Hier ist meine Textdatei (file.txt)

123456 
User1 
Available 
Active 

789456 
User2 
Not Available 
Active 
+2

Nun, nachdem Sie Ihre Linie gefunden haben, haben Sie eine for-Schleife, die die gleiche Variable, immer und immer wieder druckt. Ein Computer wird immer genau das tun, was Sie ihm sagen, anstatt, was Sie wollen, leider. –

+1

[FYI] Verwenden Sie nicht 'while (file.good())'. Es ist genau wie 'while (file.eof())': http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-conspired-wrong – NathanOliver

+0

was sollte ich stattdessen verwenden von ** während (Datei.good()) **? –

Antwort

1

Ihre innere Schleife ist nicht mehr lesen, es gerade druckt es 3 mal:

    for(int i=0;i<=2;i++){ 
        cout << line; 
       } 

Wenn Sie den Code behalten möchten mehr Zeilen lesen, müssen Sie Setzen Sie die Lesung auch in diese Schleife:

    for(int i=0;i<=2;i++){ 
        getline(file,line); 
        cout << line; 
       } 
+0

Ein Beispiel wird mir helfen, besser zu verstehen –

+0

ersetzt meinen Code mit 'für (int i = 0; i <= 2; i ++) { getline (Datei, Zeile); cout << Linie << endl; } ' funktioniert gut. Vielen Dank! –

1

Nun, Sie sind nicht die folgenden zwei Zeilen mit getline zu lesen, wenn Sie Ihr Vorkommen gefunden. Grundsätzlich Sie vermissen die getline in Ihrem for

+0

Ich verwendete 'für (int i = 0; i <= 2; i ++) { getline (Datei, Zeile); cout << Linie; } 'und jetzt gut funktioniert. Vielen Dank! :) –

Verwandte Themen