2016-04-05 5 views
0

Ich habe den Benutzer eine Liste von Namen eingeben (getNames) und dann diese Namen in eine ausgewählte TXT-Datei schreiben. Ich versuche, die Namen in der Textdatei anzuzeigen, aber nichts funktioniert. Ich habe viele verschiedene Dinge ausprobiert, kann es aber nicht herausfinden.Ich kann meine Eingabe nicht in der .txt-Datei anzeigen lassen

Die getFile-Funktion steht gleich zu Beginn. Ich muss "fout" die Namen anzeigen, die der Benutzer eingegeben hat. Wie bekomme ich die .txt, um die Namen anzuzeigen, die der Benutzer von getNames eingegeben hat?

#include <vector> 
#include <iostream> 
#include <string> 
#include <algorithm> 
#include <fstream> 

using namespace std; 
char getMenu(); // list of functions 
int getNames(vector<string>& v); 
void displayNames(vector<string>& v); 
void sortNames(vector<string>& v); 
int findName(vector<string>& v, string name); 
void removeNames(vector<string>& v, string name); 
void getFile(vector<string>& v); 

void getFile(vector<string>& v) 
{ 
    string fileName;   
    cout << "Enter file name: "; 
    getline(cin, fileName); 
    ofstream fout(fileName.c_str(),ios::app); 
    fout << ""; **// need to display names here** 
    fout.close(); 

} 

char getMenu() 
{ 
    char letter; 
     cout << "(G)etNames, (D)isplayNames, (S)ortNames, (R)emoveNames, (F)indNames," << endl << "(W)rite to file, (Q)uit:" << endl;  
    cin >> letter; 
    cin.ignore(256, '\n'); // cleans upto 256 characters 
    return toupper(letter); //toupper makes lowercase=uppercase 
} 

int main() 
{ 
    vector<string> v; 
    string name; 

    bool quit = true; 

    do 
    { 
    switch(getMenu()) 
    { 
     case 'G': getNames(v); break; 
     case 'S': sortNames(v); cout << endl << "Sorted names:" << endl; 
       displayNames(v); break; 
     case 'D': displayNames(v); break; 
     case 'F': findName(v, name); break; 
     case 'R': removeNames(v, name); break; 
     case 'W': getFile(v); break; 
     case 'Q': quit = false; break; 
     default: "Error. Try again: "; cout << endl; break; 
    } 

    } 
    while(quit); 
    cout << endl << "Program terminated." << endl; 

} 


int getNames(vector<string>& v) 
{ 
    string tmp; // gets names 
    while(true) 
    { 
     cout<<"Enter a name, quit to stop:"; 
     cin>>tmp; 
     if(tmp=="quit") 
     { 
      break; 
     } 
     v.push_back(tmp); 
    } 
} 

void displayNames(vector<string>& v) 
{ 
    for(int i=0; i<v.size(); i++) // displays names 
    { 
     cout<<v.at(i)<<endl; 
    } 
} 

void sortNames(vector<string>& v) // sort names 
{ 
    sort(v.begin(),v.end()); 
} 

int findName(vector<string>& v, string name) 
{ 
    cout << "Enter name to find : " << endl; 
    cin >> name; 
    int pos = find(v.begin(), v.end(), name) - v.begin(); 
     if (pos<v.size()) 
    { 
    cout << "The name, " << name << ", was found." << endl; 
    } 
    else 
    { 
     cout << "Name not found." << endl; 
    }  
} 

void removeNames(vector<string>& v, string name)  
{{ 
    string name; 
    if(v.size() > 0) 
    {  
    cout << "Enter name to remove: " << endl; 
    } 
    cin >> name; 

    int pos = find(v.begin(), v.end(), name) - v.begin(); 
    if (pos >= 0)  

    { 
     v.erase(v.begin() + pos); //goes to 
           //(first value + the position) and erases  
     cout << name << " has been removed." << endl; 
    } 
    else 
    { 
     cout << "That name does not exits." << endl; 
    } 


    }} 
+0

'getFile' sollte ähnlich wie' displayNames' sein. 'std :: cout' ist ein Ausgabestream als' std :: ofstream'. – Jarod42

+0

Sie können über die Elemente des Vektors iterieren, wenn Sie das möchten. Was meinst du genau mit "Namen anzeigen"? Kannst du ein Beispiel geben, was funktioniert hat und was nicht? –

+0

Ich möchte die Namen haben, die ich eingegeben haben in der txt angezeigt beispiels Tom, John, Mike etc. @arc_lupus – zjal

Antwort

2

Simplest Lösung scheint zu sein:

for(auto& name : v) 
    fout << name << '\n'; 

Ich bin nicht sicher, wie sie getrennt werden sollten, though.

Verwandte Themen