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.

getline Ja nur wohin?

Empfohlene Antworten

Veröffentlicht

Moin zusammen,

ich muss gerade ein kleines Lagerverwaltungs Programm in C++ Schreiben. Im moment hänge ich bei der Benutzerkontrolle.

Hier die Situation:

Es soll beim Programmstart Überprüft werden ob die beiden Text Dateien (.txt) infoName.txt (Datei für Benutzer) und die Datei infoPW.txt (liste der Passwörter für die Benutzer). schon vorhanden sind oder nicht. Wenn nicht sollen Sie angelegt werden und dem User per Ausgabe mitgeteilt werden dasdieser Schritt erfolgreich beendet wurde (diese aktion funktioniert bereits ohne Probleme). Der Benutzer soll nun den Username und das Passwort eingeben. Die eingabe soll mit den Informationen aus den beiden .txt Dateien überprüft werden (hier happerts^^).

Problemdefinition:

Hier mal der QT Auszug:

     cout << "\nGeben Sie den Benutzernamen ein:";

               cout << "\n";

               cout << "<INPUT>";

               cin >> LoginNameUeb;                   // Eingabe desBenutzernamens

               cout << "Geben Sie das Passwort ein:";

               cout << "\n";

               cout << "<INPUT>";

               cin >> LoginPwUeb;                    // Eingabe des Passworts

               ifstream loginInfoName("infoName.txt"); // öffnen der Datei infoName.txt

               ifstream loginInfoPW ("infoPW.txt"); // öffnen der Datei infoPW.txt

               while (!loginInfoName.eof()){        //schleifendurchlauf solange loginInfoName nicht EOF

                     getline (loginInfoName,LoginNameUeb);           //Zeilenweises einlesen der Informationen aus infoName.txt          

                     while (!loginInfoPW.eof()){                     // schleifen durchlauf solange infoPW nicht EOF

                           getline (loginInfoPW, LoginPwUeb);        // Zeilenweise einlesen der Informationen aus infoPW.txt

                     }

               }

Das problem ist wie kann ich die eingelesenen zeilen in eine Variable schreiben und diese dann mit der eingabe überprüfen? Wäre super wenn ihr mir nen tipp geben könntet wie ich das anstelle^^.

so long

DeMon

Hi,

erst mal danke für deine antwort. Das mit der Variable stimmt natürlich den Auszug den ich hier gepostet habe war innerhalb meiner Ausprobier aktion^^. Ich habe einfach sämmtliche möglichkeiten ausprobiert^^. Eigentlich müsst es richtig heißen (zumindest so wies war):

getline (loginInfoName,LoginInfName);
und
getline (loginInfoPW,LoginInfPw);

ich weis die Namensgebung is bescheiden aber zu der zeit is mir nichts besseres eingefallen^^.

so long

DeMon

Willst du nur prüfen, ob die Eingabe auf irgendeine Kombination von Name und Passwort passt, oder müssen es schon die zusammengehörigen sein?

Denn dadurch, dass du die Schleifen verschachtelst, würdest du jede Kombination prüfen, was vermutlich nicht gewollt ist.

Moin,

du hast recht es ist eigentlich nicht gewollt, es soll das haargenau sein (also root - root und nicht root - anderespw). Gut das du dass sagst 0.0

so long

DeMon

Bearbeitet von DeMon Toll

Moin,

ich habs endlich :). War im grunde ganz einfach^^. Danke an Klotzkopp für deine Hilfe, vor allem dein 1. Post hat mich auf die richtige Spur gebracht^^.

Achja die beiden while Schleifen hab ich ausseinander gebastelt^^.

Hier mal der QT für die leute die ein ähnliches Problem haben:

 while (!loginInfoName.eof()){        //schleifendurchlauf solange loginInfoName nicht EOF

                     getline (loginInfoName,LoginInfName);           //Zeilenweises einlesen der Informationen aus infoName.txt  

 }        

 while (!loginInfoPW.eof()){                     // schleifen durchlauf solange infoPW nicht EOF

                      getline (loginInfoPW,LoginInfPw);        // Zeilenweise einlesen der Informationen aus infoPW.txt      

 }

 if ((LoginNameUeb == LoginInfName) && (LoginPwUeb == LoginInfPw)){

                      cout << "Erfolgreich eingeloggt" << endl;                 

 } 

 else

                      cout << "Fehler beim Login" << endl;

grütze und ein schönes WE

DeMon

hmmm....du hast recht weil die Variable ja bei jedem durchlauf neu überschrieben wird =/. naja dann..........werd ich mal weiter rumprobieren^^. Schade zu früh gefreut xD

So es funktioniert (getestet mit je 5 Zeilen pro Datei).

Hier der QT:

              while (!loginInfoName.eof()){        //schleifendurchlauf solange loginInfoName nicht EOF

                     getline (loginInfoName,LoginInfName);           //Zeilenweises einlesen der Informationen aus infoName.txt 

                     if (LoginInfName == LoginNameUeb){

                        cout << "Benutzernamen erfolgreich verifiziert" << endl;

                        break;                

                     }

                     else{

                     } 

               }    

               while (!loginInfoPW.eof()){                     // schleifen durchlauf solange infoPW nicht EOF

                     getline (loginInfoPW,LoginInfPw);        // Zeilenweise einlesen der Informationen aus infoPW.txt  

                     if (LoginInfPw == LoginPwUeb){

                        cout << "Passwort erfolgreich verifiziert" << endl;

                        break;

                     }  

                     else{

                     }

               }

               if ((LoginNameUeb == LoginInfName) && (LoginPwUeb == LoginInfPw)){

                                cout << "Erfolgreich eingeloggt" << endl;                 

               } 

               else{ // Fehler ausgabe bei nicht erfolgreichem Login

                   cout << "Fehler beim Login" << endl;

                   cout << "Versuchen Sie den Login erneut" << endl;

                   cout << "Sollte es dennoch probleme geben wenden Sie sich an" << endl;

                   cout << "ihren Systemadministrator." << endl;

                   cout << "Druecken sie eine beliebige Taste um fortzufahren" << endl;

                   cout << "\n\n<INPUT>";

                   getch();

                   goto LoginGoTo;

               }

               }

Ich weis is nicht gerade die sauberste Methode mit break aber es funktioniert^^.

so long

DeMon

Jetzt hast du aber wieder das Problem, dass jede Kombination aus Name und Passwort akzeptiert wird, auch wenn die gar nicht zusammengehören.

Muss das eigentlich sein, dass die Daten auf zwei Dateien verteilt sind? Das macht das ganze unnötig kompliziert.

Unsauber an dem Code ist übrigens nicht das break, sondern das goto. ;)

Ja ich weis das goto hat die Eigenschaft einfache Quelltexte ruck zuck hunds kompliziert zu machen^^.

Zu den Benutzern bzw. den Passwörtern. Ich muss später noch eine Funktion einbauen die überprüft das jedes Passwort nur einmal vorkommt. Da ja noch die Funktion des User anlegens in innerhalb des Programms auch noch bestandteil ist. Zu den beiden Dateien....ja das war so vorgabe von meinem Cheffe^^. Da ich nich ganz so der Programmier Profi bin und mir ehrlich gesagt neue Themen in diesem bereich recht schwer fallen diese schnell zu lernen hat er sich ne Aufgabe ausgedacht die mich fordern soll^^. Naja was will man da machen ;).

Aber trotzdem mal thx für deine Hilfe ;), wobei ich so das leise gefühl habe ich werde in den nächsten Tagen mich noch 1 oder 2 mal hier melden müssen^^.

so long

DeMon

Bearbeitet von DeMon Toll

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

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.