An Datei anfügen

meilon

Erfahrenes Mitglied
Hi,
ich habe gerade angefangen, C++ zu lernen. Ich meine, das grundlegende schon zu können :-)
Jetzt sitze ich an einem Programm, mitwelchem man seine Adresse eingibt, und diese in eine Textdatei geschrieben werden soll.

Dazu habe ich ein paar Fragen:
- Wie kann ich etwas in eine Datei anfügen? Bisher wird alles vorherige überschrieben
- Wie kann ich bei der Eingabe auch Leerzeichen zulassen (wegen der Hausnummer)?

Hier mein Code:
Code:
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
int main(int argc,char *argv[])
{
    string Vorname,Nachname,Strasse,Nummer,PLZ,Ort;
    {
        cout << "Dies ist ein kleiner Test, Daten ueber C++ in eine Datei zu bekommen!\n";
        cout << "ACHTUNG: Die Hausnummer wird extra angegeben!\n\n";
    
        cout << "Vorname:  "; cin >> Vorname;
        cout << "Nachname: "; cin >> Nachname;
        cout << "Strasse:  "; cin >> Strasse;
        cout << "Nummer:   "; cin >> Nummer;
        cout << "PLZ:      "; cin >> PLZ;
        cout << "Ort:      "; cin >> Ort;
    
        cout << "\n\nSo, Datein eingegeben. Zur Kontrolle nochmal ausgegeben:\n";
    
        cout << "\nVorname:  " << Vorname;
        cout << "\nNachname: " << Nachname;
        cout << "\nStrasse:  " << Strasse;
        cout << "\nNummer:   " << Nummer;
        cout << "\nPLZ:      " << PLZ;
        cout << "\nOrt:      " << Ort;
        cout << "\n\n";
                
                
        FILE *fp;
        fp=fopen("test2.txt","w");
        fprintf(fp,"%s\n",Vorname.c_str());
        fprintf(fp,"%s\n",Nachname.c_str());
        fprintf(fp,"%s\n",Strasse.c_str());
        fprintf(fp,"%s\n",Nummer.c_str());
        fprintf(fp,"%s\n",PLZ.c_str());
        fprintf(fp,"%s\n",Ort.c_str());
        fclose(fp);

        system("PAUSE");
    }
}
Wenn Ihr sonst noch verbesserungsvorschläge habt, dann sagts mir, ich vertrage Kritik!

mfg
Klink
 
Danke für die schnelle Antwort, und wie siehts aus mit dem Leerzeichen in der Eingabe?

mfg
 
ne, geht nicht. Habs so gemacht: cout << "Strasse: "; cin.getline(Strasse);

15 W:\temp\compile\ein-ausgabe\test.cpp
no matching function for call to `
664 C:\Dev-Cpp\include\c++\bits\istream.tcc
candidates are:
176 C:\Dev-Cpp\include\c++\istream
std::basic_istream<_CharT,
 
Mmhh. Also mit cin kannst du das mit dem WS (Leerzeichen) wohl vergessen. Cin liest immer nur bis zum White Space (Leerzeichen, Return, Tabulator). Kennst du die Methode getch();? Diese hält dein Programm an und wartet auf einen Tastendruck, welchen sie zurück gibt.

Code:
#include <conio.h>

char taste, HN[100];

do
{
   taste=getch();
   if(taste!=13) HN=HN+taste;
} while(taste!=13);
// Hole Eingabe solange taste kein Enter ist. (13 ist das Ascii-Zeichen für Enter)
 
sry, leider funktioniert das nicht, und ich habe wohl noch nicht das Wissen, um das zu fixen.
Wenn ich das Programm compiliere, wird kein Fehler angezeigt. Wenn ich die Daten eingebe, wird an der Stelle, wo die Straße eingegeben wird, nicht die Buchstaben angezeigt, die man eingibt, nicht sehr benutzerfreundlich :(
Und wenn es dann um das Speichern der Daten geht, stürzt das Programm ab.

Mein System:
WinXP Pro SP1
Dev-C++ 4.9.8.0

Unter linux kann ich es nicht kompiliere, weil er die conio.h nicht hat, wo bekomm ich sie her und wo muss ich sie hinkopieren?
 
Cin liest immer nur bis zum White Space (Leerzeichen, Return, Tabulator).
Nur beim formatierten Einlesen via ">>". Die get() -Methode kann auch beliebige Einzelchars lesen; ebenso liest getline() nicht bis zum nächsten Blank, sondern bis zum nächsten Zeilentrenner.

@Oberst Klink:
Ich kann dir so leider nicht weiterhelfen. Eventuell kann ich es, wenn du mal deine Ein/Ausgaberoutinen postest.
 
sry, ich verstehe nicht was du meinst! Ich bin ja noch neu in der Materie :-)

Ich poste jetzt den aktuellen code und die Kompilierte .exe
Code:
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <conio.h>

using namespace std;
int main(int argc,char *argv[])
{
    string Vorname,Nachname,Strasse,Nummer,PLZ,Ort; char HN,taste;
    {
        cout << "Dies ist ein kleiner Test, Daten ueber C++ in eine Datei zu bekommen!\n";
        cout << "ACHTUNG: Die Hausnummer wird extra angegeben!\n\n";
    
        cout << "Vorname:  "; cin >> Vorname;
        cout << "Nachname: "; cin >> Nachname;
        
        cout << "Strasse:  "; 
        do
        {
           taste=getch();
           if(taste!=13)HN=HN+taste;
        } while(taste!=13);
        Strasse=HN;
        //cin.getline(Strasse);
        cout << "Nummer:   "; cin >> Nummer;
        cout << "PLZ:      "; cin >> PLZ;
        cout << "Ort:      "; cin >> Ort;
    
        cout << "\n\nSo, Datein eingegeben. Zur Kontrolle nochmal ausgegeben:\n";
    
        cout << "\nVorname:  " << Vorname;
        cout << "\nNachname: " << Nachname;
        cout << "\nStrasse:  " << Strasse;
        cout << "\nNummer:   " << Nummer;
        cout << "\nPLZ:      " << PLZ;
        cout << "\nOrt:      " << Ort;
        cout << "\n\n";
                
                
        FILE *fp;
        fp=fopen("test2.txt","wa");
        fprintf(fp,"%s\n",Vorname.c_str());
        fprintf(fp,"%s\n",Nachname.c_str());
        fprintf(fp,"%s\n",Strasse.c_str());
        fprintf(fp,"%s\n",Nummer.c_str());
        fprintf(fp,"%s\n",PLZ.c_str());
        fprintf(fp,"%s\n",Ort.c_str());
        fclose(fp);

                        
        printf("Eine beliebige Taste zum beenden drücken\n");
        system("PAUSE");
    }
}
Ach ja, vll das was du wolltest:
server:/temp/compile/ein-ausgabe # g++ test.cpp -o test
test.cpp:5:19: conio.h: No such file or directory
test.cpp: In function `int main(int, char**)':
test.cpp:21: error: `getch' undeclared (first use this function)
test.cpp:21: error: (Each undeclared identifier is reported only once for each
function it appears in.)
 

Anhänge

Zuletzt bearbeitet:
Zurück