Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Moin allerseits ich habe ein Problem in C++,

und zwar.....

soll eine Eingabe solange eingelesen und überschrieben werden bis jemand die Enter Taste drückt. Die ganze Geschichte soll dann als Datenfeld in eine Text datei geschrieben werden.

Mein gedanke war das per while schleife zu tun ich denke mal das ist auch nich sooo verkehrt aber nun die frage wie sage ich ihm das er nur bis zurbetätigung der Enter Taste einlesen soll. Ich hörte das soll per ASCII Code gehen. Nur wie baue ich das ein und wie ist der ASCII Code der Enter Taste.^^

Wär super wenn ihr mir nen tipp geben könntet.

so long

DeMon

Geschrieben (bearbeitet)

Moin Hexa,

k....nur wie bau ich das ein?.....In aller regel wird das doch mit Backshlash (\) gemacht oder?!

Hier mal der Beispiel code:


while (Produktname != ?){

     int i++;

     cin >> Produktname[i];

     Wbest << Produktname[i];

     Wbest.close();

}

Habs auch schon mit ' probiert aber kein Erfolg =/

so long

DeMon

Bearbeitet von DeMon Toll
Geschrieben

Nunja durch das Hochzählen von i schreibt er ja jedesmal in ein anderes Feld. Sprich Produktname[1] schleifendurchlauf Produktname[2] schleifendurchlauf....usw..

Sodass beim Wort Hallo: H <- Produktname[1], A <- Produktname[2] usw. in das Feld geschrieben wird. Am ende wird das char Datenfeld dann in die Textdatei geschrieben^^. Soweit mal die Theorie xD. Das mit dem Schreiben und dem ++ funktioniert auch nur wie gesagt hänge ich bei der Enter Tasten abfrage^^.

so long

DeMon

Geschrieben

Und wo wird da jetzt was überschrieben :confused:

Ansonsten halt wie gesagt:


string Produktname;
cin>>Produktname;
Wbest << Produktname;
Wbest.close();
[/PHP]

Fertig.

Statt string könntest du auch ein char Array nehmen aber dann bekommst du mit cin Probleme sobald ein längerer Text eingegeben als dein Array lang ist und du müsstest eine andere Funktion nehmen welche die Eingabe begrenzt. cin.get oder getline glaube ichwars unter C++. Aber da du ja eh C++ benutzt gibt es keinen Grund string nicht zu verwenden.

Geschrieben

Moin!

k....nur wie bau ich das ein?.....In aller regel wird das doch mit Backshlash (\) gemacht oder?!

Wie meinen?

Hier mal der Beispiel code:

Dann wollen wir mal schauen...

while (Produktname != ?){
Ah ja... was ist Produktname? string? char-Array? Ansammlung willkürklicher Speicherbereiche? ;)
     int i++;
Blödsinn, da i bei jedem Schlaufendurchlauf neu angelegt, aber nicht intitialisiert und um 1 erhöht wird. -> Unvorhergesehbares verhalten.
     cin >> Produktname[i];
Das schaut doch schon fast gut aus.
     Wbest << Produktname[i];
Keine Ahnung was Wbest ist...
     Wbest.close();

}

... aber scheinbar etwas was man schließen kann.

Habs auch schon mit ' probiert aber kein Erfolg =/

Das ist schön. Meine Kristallkugel sagt mir das da irgendwas falsch ist. ;)

Kann sein das ich schon Betriebsblind bin, aber aus diesen Informationen kann ich mir leider nichts zusammen reimen.

Ansonsten würde ich sagen, daß der Tipp vom Piraten schon in die richtige Richtung geht. :)

Geschrieben
Moin Hexa,

k....nur wie bau ich das ein?.....In aller regel wird das doch mit Backshlash (\) gemacht oder?!

[...]

Habs auch schon mit ' probiert aber kein Erfolg =/

Backslash und einfaches Hochkomma wird nur verwendet, wenn es sich um eine ESC-Zeichenfolge handelt.

Quasi Text == '\n'.

Einzelne chars sind nichts weiter als Zahlen (-127 bis 128 || 0 bis 255 [byte]), folglich kannst du die einfach auf den Wert prüfen:


char zeichen;

//irgendwas

if (zeichen == 13) //äquivalent zu zeichen == '\n' oder zeichen == 0x0D

btw: Wenn du das aus Datei ließt oder schreibst, dann brauchst du bei Windows manchmal noch LF(0x0A) zusätzlich zum CR.

Geschrieben (bearbeitet)

Moin,

erst mal danke für eure Antworten :). Hab mir nun was zusammen gebastelt nur jetzt hab ich ein anderes problem bzw. phänomen (zumindest für mich^^) will ich mal sagen. Und zwar:

[B]Wbest << Produktname;[/B] [I]// Wbest ist der Filepointer auf Wbest.txt nur 

wird der Inhalt von Produktname (welcher ein string ist)

nicht in die Datei Wbest.txt geschrieben.
Wie gesagt für mich ist es ein phänomen vlt. weis einer die Antwort darauf denn eigentlich soll es genau das machen den Inhalt in die Datei schreiben oder?! Die Datei Wbest.txt wurde mit
fstream Wbest (Wbest.txt); 

geöffnet also zum lesen und zu schreiben.

so long

DeMon

Bearbeitet von DeMon Toll
Geschrieben

Moin.

fstream Wbest (Wbest.txt); 

geöffnet also zum lesen und zu schreiben.

Wieso? Brauchst du beides?

Und iostream wäre dann glaub ich besser geeignet.

Wenn die Datei 'Wbest.txt' nur als Ausgabe dient, dann nimm ofstream und vor dem schließen der Datei noch ein 'flush()'.

Geschrieben

Es ist schon relativ lang;) für meine verhältnisse auf jedenfall^^. Er ist auf jeden fall zu lang für einen Post^^. Ich müsste (laut meldung) 10k zeichen kürzen. Ich kann ja wenn gewollt es in teilen posten^^. Oder ich schicks dir als pn.

so long

DeMon

Geschrieben

Nein es läuft alles einwandfrei bis auf das schreiben. Er meckert nicht er wirft keine Fehler aus es stürtzt nichts ab er schreibt einfach nur nicht^^.

Hier mal der Komplette Switch case block bis zu Relevanten Stelle:

short int change_yn;

                                            eingabegoto:

                                            string Produktmenge;

                                            string Produktname;

                                            cout << "\n\n\nModule zur Warenzufuhr"<< endl;

                                            cout << "___________________________"<<endl;

                                            cout << "Name des Prdoukts:\t";

                                            cin >> Produktname; 

                                            cout << "\n\nMenge des Produkts:\t";

                                            cin >> Produktmenge;

                                            bestaetigungsgoto:

                                            cout << "\n\nUeberpruefen Sie Bitte die Eingaben"<<endl;

                                            cout << "\n\n\n\t====================" << endl;

                                            cout << "\t    Name:   " << Produktname <<endl;

                                            cout << "\t    Name:   " << Produktmenge <<endl;

                                            cout << "\t====================" << endl;

                                            cout << "\n\nDiese Informationen uebernehmen und schreiben?!"<<endl;

                                            cout << "[1] Ja Informationen Schreiben"<<endl;

                                            cout << "[2] Nein Informationen nicht Schreiben und zur Eingabe zurueck kehren"<<endl;

                                            cout << "<INPUT>:";

                                            cin >> change_yn;

                                            switch (change_yn){  //bestätigungsanfrage

                                                   case 1:       //Eingabe bestätigung

                                                          cout << "OK Aenderungen werden Uebernommen"<<endl;

                                                          Wbest << Produktname;

                                                          Wbest << "\t";

                                                          Wbest << Produktmenge;

                                                          cout << "Schreiben der Daten erfolgreich"<<endl;

                                                          cout << "Status: OK"<< endl;

                                                          //flush();

                                                          Wbest.close();  

                                                          break;

so long

DeMon

Geschrieben

Moin,

change_yn ist ein short int da ja im grunde nur 2 wahlmöglichkeiten bestehen. Wbest.txt wird richtig geöffnet (zumindest was das lesen angeht) ich kann den inhalt auslesen und auf dem Bildschirm ausgeben. Wie gesagt ich bin echt ein bissl ratlos^^. Achja falls es hilft ich verwende DevCPP in der Version 4.9

so long

DeMon

Geschrieben
Wbest.txt wird richtig geöffnet (zumindest was das lesen angeht) ich kann den inhalt auslesen und auf dem Bildschirm ausgeben.
Öffnest du etwa dasselbe fstream-Objekt mehrfach? Das ist keine gute Idee.

Soweit man das aus dem kurzen Codeabschnitt erkennen kann, sieht dein Code ziemlich unstrukturiert aus. Du solltest etwas weniger Wert auf schick formatierte Ausgaben, und dafür mehr auf eine bessere Strukturierung des Codes legen. Die Gotos müssen raus, dafür muss eine ordentliche Fehlerbehandlung rein.

Du siehst ja, dass deine Ausgabe "Schreiben der Daten erfolgreich" gar nicht stimmt.

In einem riesigen, unstrukturierten Codehaufen ist es nunmal sehr schwierig, einen Fehler zu finden.

Geschrieben (bearbeitet)

Nein es wird nur 1 mal per fstream zum lesen und schreiben geöffnet dann wird per while schleife der inhalt ausgegeben (das funktioniert), nach ein paar verzweigungen kommen wir zum schreiben (Wbest.txt wird nicht geschlossen) und das funktioniert nicht das schreiben. Hier mal etwas mehr QT^^.

 if (menuewahl == 1){ // Kompletter Warenbestand anzeigen

                                         MenueWahlgoto:

                                         short int Dialogwahl;

                                         system ("cls");

                                         fstream Wbest("Wbest.txt");  //Die Datei Wbest.txt zum lesen und schreiben öffnen

                                         string line;

                                         while (getline(Wbest, line)){  //zeilenweises einlesen der Datei

                                               cout << line << endl;

                                               output_counter = output_counter+1;  //je zeilendurchlauf den couter um 1 erhöhen

                                         }

                                         cout << "_______________________________"<<endl;  //Mögliche Interaktionsmöglichkeiten

                                         cout << "[1] - Dialog erneuern" <<endl;

                                         cout << "[2] - Ware hinzufuegen" << endl;

                                         cout << "[3] - Ware loeschen" << endl;

                                         cout << "[4] - Zum Hauptmenue" << endl;

                                         cout << "<INPUT>:"; 

                                         cin >> Dialogwahl;

                                         if (Dialogwahl == 1){

                                            goto MenueWahlgoto;            

                                         }

                                         if (Dialogwahl == 2){

                                            short int change_yn;

                                            eingabegoto:

                                            string Produktmenge;

                                            string Produktname;

                                            cout << "\n\n\nModule zur Warenzufuhr"<< endl;

                                            cout << "___________________________"<<endl;

                                            cout << "Name des Prdoukts:\t";

                                            cin >> Produktname; 

                                            cout << "\n\nMenge des Produkts:\t";

                                            cin >> Produktmenge;

                                            bestaetigungsgoto:

                                            cout << "\n\nUeberpruefen Sie Bitte die Eingaben"<<endl;

                                            cout << "\n\n\n\t====================" << endl;

                                            cout << "\t    Name:   " << Produktname <<endl;

                                            cout << "\t    Name:   " << Produktmenge <<endl;

                                            cout << "\t====================" << endl;

                                            cout << "\n\nDiese Informationen uebernehmen und schreiben?!"<<endl;

                                            cout << "[1] Ja Informationen Schreiben"<<endl;

                                            cout << "[2] Nein Informationen nicht Schreiben und zur Eingabe zurueck kehren"<<endl;

                                            cout << "<INPUT>:";

                                            cin >> change_yn;

                                            switch (change_yn){  //bestätigungsanfrage

                                                   case 1:       //Eingabe bestätigung

                                                          cout << "OK Aenderungen werden Uebernommen"<<endl;

                                                          Wbest << Produktname;

                                                          Wbest << "\t";

                                                          Wbest << Produktmenge;

                                                          cout << "Schreiben der Daten erfolgreich"<<endl;

                                                          cout << "Status: OK"<< endl;

                                                          Wbest.close();  

                                                          break;

Und ja die goto's sind alles andere als sauber ich weis aber meiner meinung nach die einzige möglichkeit in einem Programm an bestimmte stellen zu springen oder gibts da noch etwas anderes?!

so long

DeMon

Edit: Das mit der Fehlerbehandlung stimmt ich hab da auch schon eine idee wie ich das anstelle (zeilenweises einlesen und anschließend mit der eingabe vergleichen), aber momentan geht es ja um das Schreiben der Daten und das klappt irgendwie nicht^^.

Bearbeitet von DeMon Toll

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...