Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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.

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. :)

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.

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

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()'.

Ich brauche beide methoden da in einem vorigen schritt der Inhalt in der Console ausgegeben wird. Das mit dem flush(); ist ein guter Tipp danke :)

so long

DeMon

Das dachte ich auch^^, dem war aber nicht so =/. Und ich bin bis jetzt noch nicht drauf gekommen wieso^^.

so long

DeMon

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

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

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

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.

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

Stimmt Funktionen :upps, ich werd jetzt anfangen in Funktionen zu packen^^.

so long

DeMon

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.