Fehlerhafte Stringübergabe

Lesterdor

Erfahrenes Mitglied
Guten Tag liebe Community,

zurzeit schreibe ich gerade an einem Programm, was das Gesetz der großen Zahlen veranschaulichen soll. Es ist eine reine Consolenanwendung und funktioniert auch soweit.
Allerdings soll der ganze Vorgang in einer Textdatei dokumentiert werden, die vom Benutzer beliebig bennannt werden kann. Genau da liegt mein Problem, denn der Dateiname bricht beim Leerschritt ab, obwohl es ein String ist.

Ich poste für den Anfang einfach meine Main.cpp und die Funktion, die den Dateinamen ermitteln soll. Falls noch mehr benötigt wird, bitte einfach sagen :)

Main.cpp:
Code:
#include <iostream>
#include "layout_m.h"
#include "layout_c.h"
#include "start.h"
#include "start_c.h"
#include "filename.h"
#include "process.h"
#include "process_c.h"
#include "intro.h"
#include "size_ms.h"
#include "process_ml.h"
#include "process_cl.h"
using namespace std;

int main()
{
    while (true)
    {
            switch (intro())
            {
                case 0 :
                {
                    if(size_ms()==0)
                    {
                        system("CLS");
                        layout_m();
                        unsigned long int anzahl=start();
                        string data_name=filename();
                        process(anzahl, data_name);
                        cin.get();
                    }

                    else
                    {
                        system("CLS");
                        layout_m();
                        unsigned long int anzahl=start();
                        string data_name=filename();
                        process_ml(anzahl, data_name);
                        cin.get();
                    }

                break;
                }

                case 1 :
                {

                    if(size_ms()==0)
                    {
                        system("CLS");
                        layout_c();
                        unsigned long int anzahl=start_c();
                        string data_name=filename();
                        process_c(anzahl, data_name);
                        cin.get();
                    }

                    else
                    {
                        system("CLS");
                        layout_c();
                        unsigned long int anzahl=start_c();
                        string data_name=filename();
                        process_cl(anzahl, data_name);
                        cin.get();
                    }
                break;
                }

       }

    system("color 07");
    system("CLS");
    }
return 0;
}

Filename.cpp:
Code:
#include <iostream>
#include <string>
#include "filename.h"
using namespace std;

string filename()
{
    string filename;
    cout<<"Wie soll die Datei hei\xE1 \ben: ";
    getline(cin,filename);
    filename+=".ini";
    return filename;

}

Wie bereits erwähnt funktioniert alles außer der Bennennung, sofern der Dateiname einen Leerschritt enthält (Beispiel: Test geht, aber Test me wird fehlerhaft)

Anmerkung:
Sobald beim Dateiname ein Leerschritt erfolgt, wird in der Console auch die Fehlermeldung von der Intro-Funktion ausgegeben, was mich auch wundert, daher poste ich den Code an dieser Stelle:
Intro.cpp
Code:
#include <iostream>
#include <limits>
#include "intro.h"
#include "draw_equals.h"
using namespace std;
int intro ()
{

    cout<<"\"Das Gesetz der gro\xE1 \ben Zahlen besagt,\ndass sich die relative H\x84 \bufigkeit eines Zufallsergebnisses\nimmer weiter an die rechnerische  Wahrscheinlichkeit\nf\x81 \br dieses Ergebnis (Erwartungswert) ann\x84 \bhert,\nje h\x84 \bufiger das Zufallsexperiment durchgef\x81 \bhrt wird.\"\n";
    cout<<draw_equals();
    unsigned short int choice;
    bool check=false;
    do
    {
    cout<<"Bitte w\x84 \bhlen Sie die Versuchsart:\n\n \t\t\t[0]=W\x81 \brfel \t[1]=M\x81 \bnze\n";
    cin>>choice;
    if (choice>1)
    {
       cerr<<"Falsche Eingabe22\a\n";
        cin.clear();
      cin.ignore(numeric_limits<streamsize>::max(),'\n');
    }
    else
        check=true;
    }while (check==false);

    return choice;
}

Ich hoffe, dass mir geholfen werden kann und bedanke mich recht herzlich im Voraus!
 
Hallo ComFreek,

mein Programm soll ja eine Textdatei mit der Erweiterung *.ini erstellen. Das geschieht in der Funktion Process().

Process.cpp
Code:
#include <iostream>
#include <time.h>
#include <string>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <vector>
#include "process.h"
#include "draw_raute.h"
#include "draw_stars.h"
#include "draw_tilde.h"

using namespace std;

void process(unsigned long int& anzahl, string& filename)
{
    vector<long double>cube(6);//Vector für Würfelaugen (1,2,3,4,5,6)
    ofstream datei(filename.c_str());

Es ist nur ein Auszug aus der Funktion. Wie gesagt, sobald der Dateiname kein Leerschritt enthält, kommt kein Fehler und alles läuft wie erwartet.
Außerdem kommt das Programm gar nicht bis zu der Funktion, denn sobald ich auf die Frage, wie die Datei heißen soll z. B: Test Eins eingebe, kommt die Fehlermeldung aus Intro() und ich werde an den Programmanfang geschickt.
 
Vielleicht ist das & vor filename in process zuviel:

void process(unsigned long int& anzahl, string& filename)
 
Hey,

es geht ganz einfach Dateien abzuspeichern. Mit fstream.

Code:
fstream fDatei;

fDatei.open(cDateipfad);
fDatei.write(cBuffer, sizeof(cBuffer));
fDatei.close();

auch einfach mal danach googeln
 
Hi.

@Lesterdor: Dann verwende doch mal einen Debugger und schau was dort im einzelnen passiert.

Oder pack mal das gesamte Projekt zusammen und lade es hier hoch.

Gruß
 
Hallo,

ich habe meinen ganzen Projekt-Ordner jetzt gepackt und hochgeladen. Ich benutze Code::Blocks. Im Bin-Ordner befindet sich die *.exe.

Gdgz.exe
 

Neue Beiträge

Zurück