LogIn Datei



  • Guten Abend...
    Ich versuche mich gerade in C++ und habe eine Anmeldung über Console gemacht.
    Es funktioniert alles, aber er schreibt jeden neuen Benutzer + Daten in eine neue .txt Datei! Mein Ziel ist es jedoch die Benutzerdaten untereinander zu schreiben (Username : Password).
    Hoffe, dass ihr mir weiterhelfen könnt!
    https://pastebin.com/y48DNUhr

    Mit freundlichen Grüßen



  • main() rekursiv aufrufen ist nicht. basic.start.main/3

    The function main shall not be used within a program.

    Aus deinem Code geht nicht hervor wie da verschiedene Dateien erstellt werden sollen.

    Du solltest Code besser hier im Forum posten anstatt externer Links. Schreibe darzu ``` in eine Zeile, dann deinen Code und in die nächste Zeile wieder ```. Alternativ füge Deinen Code ein, markiere ihn und klicke auf das </> über dem Bearbeitungsfenster.

    	ifstream read("D:\\C++\\Console\\Users\\Users.txt");
    	getline(read, un);
    	getline(read, pw);
    
    	if (un == username && pw == password)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    

    ist sowieso nur auf *einen* Datensatz ausgelegt. Und überhaupt ...

    return un == username && pw == password;
    
    #include <cstdlib>
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    
    class user_t {
    	std::string name;
    	std::string pwd;
    
    	friend std::istream& operator<<(std::istream &is, user_t &user)
    	{
    		std::string name;
    		std::string pwd;
    		if (is >> name >> pwd) {
    			user.name = name;
    			user.pwd = pwd;
    		}
    		return is;
    	}
    };
    
    int main()
    {
    	char const *filename{ "users.txt" };
    	std::ifstream users_file{ filename };
    	
    	if (!users_file.is_open()) {
    		std::cerr << "Couldn't open\"" << filename << "\" for reading :(\n\n";
    		return EXIT_FAILURE;
    	}
    
    
    	std::vector<user_t> users{ std::istream_iterator<user_t>{ users_file }, std::istream_iterator<user_t>{} };
    	
    	std::cout << "Name: ";
    	std::string username;
    	std::cin >> username;
    
    	std::cout << "Password: ";
    	std::string password;
    	std::cin >> password;
    
    	if (std::find(users.begin(), users.end(), user_t{ username, password }) != users.end())
    		std::cout << "Hello, " << username << "!\n";
    	else std::cout << "Don't know u!\n";
    }
    


  • Sorry wusste ich nicht...

    Mein Code war versehentlich der Falsche!

    Hier der Richtige:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    bool IsLoggedIn()
    {
    	string username, password, un, pw;
    
    	cout << "Enter username: ";
    	cin >> username;
    	cout << "Enter Password: ";
    	cin >> password;
    
    	ifstream read("D:\\C++\\Console\\" + username + ".txt");
    	getline(read, un);
    	getline(read, pw);
    
    	if (un == username && pw == password)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    
    int main()
    {
    	int choice;
    
    	cout << "1: Register\n2: Login\nYour choice: "; cin >> choice;
    	if (choice == 1)
    	{
    		string username, password;
    
    		cout << "select a username: "; cin >> username;
    		cout << "select a password: "; cin >> password;
    
    		ofstream file;
    		file.open(""D:\\C++\\Console\\" + username + ".txt");
    
    		file << username << "  :  " << password << "\r";
    
    		file.close();
    
    		main();
    	}
    	else if (choice == 2)
    	{
    		bool status = IsLoggedIn();
    		if (!status)
    		{
    			cout << "False Login!" << endl;
    			system("PAUSE");
    			return 0;
    		}
    		else
    		{
    			cout << "Succesfully loggin in!" << endl;
    			system("PAUSE");
    			return 1;
    		}
    	}
    	
    }
    


  • Naja, was erwartest Du bei

    file.open(""D:\\C++\\Console\\" + username + ".txt");
    

    als daß verschiedene Dateien angelegt werden?

    main() rekursiv aufrufen ist immer noch nicht.

    Und überhaupt, das compiliert doch nichtmal.

    @ViamixVFX sagte in LogIn Datei:

    Sorry wusste ich nicht...

    Mein Code war versehentlich der Falsche!

    Ändert nichts an dem was ich gesagt habe.



  • Bei funktioniert alles nur das Datei erstellen möchte ich ersetzen! Ich weiß nur nicht wie ich es machen muss und im Intranet finde ich nichts passendes.



  • @ViamixVFX sagte in LogIn Datei:

      file.open(""D:\\C++\\Console\\" + username + ".txt");
    

    Da ist ein " zu viel. Und du öffnest eine Datei mit dem Namen den der Benutzer eingibt. Was erwartest du?

    main() rekursiv aufrufen ist immer noch nicht. Dein Compiler darf dir wenn er das sieht auch online eine Pizza bestellen ...



  • Kannst du mir bitte erklären, was du mit Main () meinst...
    Und ja ich weiß, dass die Datei in meinem Vice erstellt wird! Aber ich möchte dies ja anderen aus nur nicht wie! 😞



  • @ViamixVFX sagte in LogIn Datei:

    Kannst du mir bitte erklären, was du mit Main () meinst...

    Du nix dürfen aufrufen main() in deine Programm, dude.

    Und ja ich weiß, dass die Datei in meinem Vice erstellt wird!

    ich nix wissen was "Vice" sein.

    Aber ich möchte dies ja anderen aus nur nicht wie! 😞

    ich auch nix können Gedankenlesen und nix haben Lust auf Raten was du meinen mit "anderen".



  • Sorry meine Autokorrektur.
    Also mein Code erstellt eine .txt Datei bei jedem neuen Benutzer. Dies möchte ich jedoch nicht und die Benutzerdaten sollen in EINE .txt. Datei geschrieben werden. Leider finde ich im Internet keine Hilfemöglichkeiten.



  • Jaaaha. Dann lege *eine* datei an. Und nicht für jede Benutzereingabe eine eigene. Du verstehst deinen eigenen Code nicht. Was soll man da groß tun!?

    Besorg' dir ein Lehrbuch, arbeite es durch.



  • @Swordfish ich verstehe ihn und habe es auch schon versucht, jedoch löscht er die Daten immer aus der Datei und schreibt sie nicht dazu!



  • @Swordfish ich verstehe ihn

    Ne. Im Leben nicht. Sonst würdest du nicht solche Fragen stellen.

    @Swordfish sagte in LogIn Datei:

    file.open(""D:\C++\Console\" + username + ".txt");

    Ok, ich versuch es. Was glaubst du das

    file.open("D:\\C++\\Console\\" + username + ".txt");
    

    tut?



  • @Swordfish er öffnet die Datei under dem Angegebenen Pfad. Der Name der gesuchten Datei entspricht der des Usernames. Und es wird nach einer .txt datei gesucht!



  • Du hast gesagt du willst *eine* Datei für alle Benutzer.



  • @Swordfish ja ich weiß! Aber mein Code den ich versucht habe, überschrieb immer die Datei mit neuen Daten!



  • @ViamixVFX sagte in LogIn Datei:

    file.open("D:\\C++\\Console\\" + username + ".txt");
    

    überschreibt garnichts. Du hast einfach keinen Plan.



  • @Swordfish das stimmt nicht!



  • std::ifstream::open() überschreibt nichts. das ist Fakt.



  • @Swordfish Auch das ist mir klar! Wenn du mal den Link öffnest, welchen ich in meiner 1. Nachricht reinschrieb, wirst du den Code sehen der die Daten überschreibt.



  • Auch der überschreibt nichts.


Anmelden zum Antworten