Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.06.2007, 16:17 Uhr
gandalf



Hallo
ich bin ein totaler C++ Neuling und wollte mal etwas ausprobieren (ich benutze die IDE CodeBlocks):

C++:

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

struct steckbrief
{
std::string Name;
std::string Alter;
std::string Geburtsjahr;
std::string Bemerkung;
};

int main()
{
char Buffer1[20], Buffer2[20], Buffer3[20], Buffer4[50];
std::cout << "Gib bitte deinen Namen ein: " << std::flush;
;std::cin.get (Buffer1, 20);
std::cout << "Gib dein Alter an: " << std::flush;
;std::cin.get (Buffer2, 20)
;std::cout << "Gib dein Geburtsjahr an: " << std::flush;
;std::cin.get (Buffer3, 20)
;std::cout << "Jetzt kannst du eine Bemekung angeben: " << std::flush;
;std::cin.get (Buffer4, 50)

;steckbrief NeuerSteckbrief;

NeuerSteckbrief.Name = Buffer1;
NeuerSteckbrief.Alter = Buffer2;
NeuerSteckbrief.Geburtsjahr = Buffer3;
NeuerSteckbrief.Bemerkung = Buffer4;

std::ofstream File ("DeinSteckbrief.txt");
std::cout.rdbuf(File.rdbuf());
std::cout << "Dein Steckbrief wurde in der Datei 'DeinSteckbrief.txt' gespeichert" << std::flush;
}



Eigentlich sollten alle Eingaben einzeln abgefragt werden und am Ende alles zusammen ausgegeben werden. Aber nach der ersten Ausgabe kommt alles auf einmal und das Programm wird beendet. Ich hab keine Ahnung was ich falsch gemacht hab und habs schon 3 mal neu geschrieben, bitte helft mir. Danke im Voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2007, 17:01 Uhr
Kest
saint


Hi!

Musst die Eingabe flushen.


C++:
#include <iostream>
#include <string>
#include <fstream>

struct steckbrief
{
std::string Name;
std::string Alter;
std::string Geburtsjahr;
std::string Bemerkung;
};

int main()
{
    char Buffer1[20], Buffer2[20], Buffer3[20], Buffer4[50];

    std::cout << "Gib bitte deinen Namen ein: " << std::flush;
    std::cin.get (Buffer1, 20);
    std::cin.sync();

    std::cout << "Gib dein Alter an: " << std::flush;
    std::cin.get (Buffer2, 20);
    std::cin.sync();

    std::cout << "Gib dein Geburtsjahr an: " << std::flush;
    std::cin.get (Buffer3, 20);
    std::cin.sync();

    std::cout << "Jetzt kannst du eine Bemekung angeben: " << std::flush;
    std::cin.get (Buffer4, 50);
    std::cin.sync();

    steckbrief NeuerSteckbrief;

    NeuerSteckbrief.Name = Buffer1;
    NeuerSteckbrief.Alter = Buffer2;
    NeuerSteckbrief.Geburtsjahr = Buffer3;
    NeuerSteckbrief.Bemerkung = Buffer4;

    std::ofstream File ("DeinSteckbrief.txt");
    File << NeuerSteckbrief.Name        << '\n'
         << NeuerSteckbrief.Alter       << '\n'
         << NeuerSteckbrief.Geburtsjahr << '\n'
         << NeuerSteckbrief.Bemerkung;
    File.close();
    std::cout << "Dein Steckbrief wurde in der Datei 'DeinSteckbrief.txt' gespeichert" << std::flush;

    std::cin.get();
}

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.06.2007, 18:09 Uhr
0xdeadbeef
Gott
(Operator)


Naja, standardkonform ist das nicht gerade. Ein bisschen sowas wie fflush(stdin);, nur halt C++ - laut Standard macht std::cin.sync() was völlig anderes. Eigentlich darf das überhaupt keine Zeichen verlieren.

Der sinnvolle Weg ist, die Eingabe gleich zeilenweise einzulesen, weil sie ja zeilenweise eingegeben wird, und ggf. aus einem stringstream zu parsen, also

C++:
    std::string Buffer1;

    std::cout << "Gib bitte deinen Namen ein: " << std::flush;
    std::getline(std::cin, Buffer1);


Dann gibts auch keine Rückstände im Stream.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.06.2007, 18:41 Uhr
Kest
saint



Zitat von 0xdeadbeef:
laut Standard macht std::cin.sync() was völlig anderes.



Schwachsinn!
Laut Standard flusht sie einen istream. (kommt natürlich drauf an, was man unter >fluch<en versteht) Dass dies nicht immer korrekt durchgeführt werden kann, ist allen bekannt; es gibt ja schließlich unterschiedliche Stream-Arten.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 27.06.2007 um 18:41 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: