C++ verder in main functie vanuit een andere function

Status
Niet open voor verdere reacties.

gast0567

Gebruiker
Lid geworden
13 feb 2015
Berichten
52
Hallo iedereen,
ik heb een probleem bij het programmeren in C++,
Het gaat om het volgende script:


#include <iostream>
using namespace std;
int Login()
{
string un;
string pw;
cout << "Log eerst in om deze applicatie te gebruiken!" << endl;
cout << "Gebruikersnaam: ";
cin >> un;
cout << "Wachtwoord: ";
cin >> pw;
if(un == "gebruikersnaam" && pw == "wachtwoord")
{
/*Dit is de plek waar het script door moet gaan naar de main function*/
}
else
{
cout << "Sorry, je inloggegevens waren niet juist. Probeer het nog eens!" << endl;
return Login();
}
}

int main()
{
Login();
}


In het script staat de plek waar het om gaat, ik wil dat op deze plek een stukje script komt te staan, waardoor hij overschakelt naar de main functie.
ik zat te denken aan continue, maar hoe gebruik ik dit?
Alvast bedankt voor het antwoord,
Groet, Bas
 
Login() is een INT functie. Op de plek waar je hebt geconstateerd dat gebruikernaam en wachtwoord in orde zijn doe je dan: Return 1;
In de main routine controleer je dan op of de returnwaarde 1 is. Zoja, dan kan worden doorgegaan, zoniet dan kan je stoppen.

In de Login functie waar je constateert dat de gebruikersnaam en/of wachtwoord niet in orde zijn bouw je een teller in.
Als de teller kleiner is dan 3 verhoog je de teller met de opdracht Teller++ en vraag je opnieuw om de gebruikersnaam en wachtwoord en anders doe je: Return 0;
De variabele Teller declareer je boven in de routine met: int Teller;
 
Laatst bewerkt:
Niet dat het hier per se nodig is, maar het levert wel nettere code op om mee te werken:

login.h:
[cpp]
#ifndef LOGIN_H
#define LOGIN_H

#include <string>
#include <iostream>

class Login {
public:
Login();
virtual ~Login();

const std::string getUsername() const;
const std::string getPassword() const;

void setUsername(const std::string username);
void setPassword(const std::string password);
void validate();
friend std::eek:stream& operator<<(std::eek:stream& stream, const Login& login);
friend std::istream& operator>>(std::istream& stream, Login& login);
bool operator!() const;
private:
std::string username;
std::string password;
const std::string requiredUsername = "guest";
const std::string requiredPassword = "12345";
bool isLoggedIn;
};

#endif // LOGIN_H
[/cpp]

login.cpp:
[cpp]
#include "Login.h"

Login::Login() {
isLoggedIn = false;
}

Login::~Login() {
}

const std::string Login::getUsername() const {
return username;
}

const std::string Login::getPassword() const {
return password;
}

void Login::setUsername(const std::string username) {
this->username = username;
}

void Login::setPassword(const std::string password) {
this->password = password;
}

void Login::validate() {
isLoggedIn = (username.compare(requiredUsername) == 0 && password.compare(requiredPassword) == 0);
if (!isLoggedIn) {
std::cout << "Ongeldige gebruikersnaam of wachtwoord" << std::endl << std::endl;
}
}

std::eek:stream& operator<<(std::eek:stream& stream, const Login& login){
stream << "Gebruikersnaam: " << login.getUsername() << std::endl << "Ingelogd: " << std::boolalpha << !login << std::endl;
return stream;
}

std::istream& operator>>(std::istream& stream, Login& login){
std::cout << "Gebruikersnaam: ";
stream >> login.username;
std::cout << "Wachtwoord: ";
stream >> login.password;
return stream;
}

bool Login::eek:perator!() const {
return isLoggedIn;
}
[/cpp]

main.cpp:
[cpp]
#include <iostream>
#include "login.h"

const unsigned int MAX_LOGIN_ATTEMPTS = 3;

int main() {
Login login;
unsigned int loginAttempt = 0;

do {
std::cin >> login;
login.validate();
} while (!login == false && ++loginAttempt < MAX_LOGIN_ATTEMPTS);

if (!login) {
std::cout << login;
} else {
std::cout << "Sorry, je inloggegevens waren niet juist. Probeer het nog eens!" << std::endl;
}

return 0;
}
[/cpp]
 
Maar als je return 1 gebruikt dan return je naar de main functie. Maar stel dat ik een andere functie wil returnen, hoe doe ik dit dan?
En waar gebruik je "continue" voor?
Alvast bedankt voor het antwoord,
Met Groet, Bas
 
Laatst bewerkt:
In het voorbeeld dat ik gaf wordt alles vanuit de main functie gedaan. Het voorbeeld was ook vooral bedoeld om te laten zien hoe je ervoor kunt zorgen de data en operaties die bij elkaar horen (bijvoorbeeld het in- en uitlezen van data) aan elkaar kunt koppelen en hoe dit zorgt voor makkelijkere en leesbaardere code. Uit het voorbeeld dat jij gaf en het antwoord van edmoor daarop, is het gewoon een kwestie:

[cpp]
// ...
int main() {
return FUNCTIE_DIE_JE_WILT_RETURNEN;
}
[/cpp]

En "continue" gebruik je wanneer je een bepaald gedeelte binnen een loop wilt overslaan. Bijvoorbeeld:

[cpp]
for (int idx = 0; idx < 10; ++idx) {
if (idx < 5) continue;
// hier de acties die ondernomen moeten worden wanneer idx >= 5 is
}
[/cpp]
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan