Проблема с функцией в программе на аутентификацию.

#include <iostream>
#include <string>

using namespace std;

void registr() {
public:char login, password;
    cout << "Логин - "; cin >> login;
    cout << "Пароль - "; cin >> password;
}

int main() {
    setlocale(0, "");
    char login_admin, password_admin,
        login, password;

    cout << "Здравствуй, о администратор, создай себе аккаунт" << endl;
    cout << "Твой новый логин - "; cin >> login_admin;
    cout << "Твой новый пароль - "; cin >> password_admin;
    cout << "Добро пожаловать в систему администратор. Сессия будет закрыта для авторизации пользователя";
    cout << "Введите свой логин и пароль для входа в систему";
    registr();
    if (login != login_admin || password != password_admin) { cout << "Логин или пароль не верны. Попробуйте авторизоваться снова"; }
    else cout << "Добро пожаловать, пользователь.";
}

Собственно проблема в том, что компилятор говорит мне, что в функции registr неопределенны переменные login и password. Пожалуйста, объясните мне, что я делаю не так. (Visual Studio 15 ). Заранее благодарю.

public:char login, password;

и что это за фигня?

Пожалуйста, объясните мне, что я делаю не так.

Не учите матчасть?

DmitriyRise, я попытался закрасить ваш код таким образом:

#include <iostream>
#include <string>
#include <clocale>  // setlocale
#include <cstdlib>  // system, exit

void inputData(const char** menu, int size, std::string & login, std::string & password);
bool isEmpty(const std::string & adminData);
bool confirmPassword(const std::string & confirm, const std::string & password);
bool confirmExit(const std::string & confirm, char exit);
bool checkData(const std::string & adminData, const std::string & input);

int main()
{
    setlocale(LC_ALL, "Russian");

    const char exitChar = 'q';
    const int menuSize = 2;
    const char* accountMenu[] = { "Создайте аккаунт администратора:\nВаш логин: ", "Ваш пароль: " };
    const char* enterMenu[] = { "Логин: ", "Пароль: " };

    std::string adminLogin("no login"),
                adminPassword("no password"),
                login("no login"),
                password("no password");
    std::string confirm("not confirmed");

    bool isConfirmed = false;

    inputData(accountMenu, menuSize, adminLogin, adminPassword);

    if (isEmpty(adminLogin)) {
        std::cout << "Вы не выбрали логин и/или пароль.\nДо свидания.\n";
        exit(EXIT_SUCCESS);
    }
    else if (isEmpty(adminPassword)) {
        std::cout << "Вы не выбрали логин и/или пароль.\nДо свидания.\n";
        exit(EXIT_SUCCESS);
    }

    do {

        std::cout << "Подтвердите пароль (q для выхода): ";
        getline(std::cin, confirm);

        isConfirmed = confirmPassword(confirm, adminPassword);

    } while (!isConfirmed && !confirmExit(confirm, exitChar));

    if (isConfirmed) {
        system("cls");

        std::cout << "Добро пожаловать в систему администратор.\nСессия будет закрыта для авторизации пользователя.\n"
                << "Введите свой логин и пароль для входа в систему (q для выхода):\n";

        do {
            inputData(enterMenu, menuSize, login, password);

            isConfirmed = checkData(adminLogin, login);

            if (isConfirmed) {
                isConfirmed = checkData(adminPassword, password);                
            }

            if (confirmExit(password, exitChar) || confirmExit(login, exitChar)) {
                break;
            }

            if (!isConfirmed) {
                std::cout << "Неверный логин и/или пароль.\nПопробуйте авторизоваться снова.\n";
            }
        } while (!isConfirmed && !confirmExit(login, exitChar) && !confirmExit(password, exitChar));

        if (isConfirmed) {
            std::cout << "Добро пожаловать.\nPress any key to quit.\n";
            std::cin.get();
        }
    }

    std::cout << "До свидания.\n";

    return 0;
}

void inputData(const char** menu, int size, std::string & login, std::string & password)
{
    for (int i = 0; i < size; i++) {
        std::cout << menu[i];

        if (!i) {
            getline(std::cin, login);
        }
        else {
            getline(std::cin, password);
        }
    }
}

bool isEmpty(const std::string & adminData)
{
    return "" == data;
}

bool confirmPassword(const std::string & confirm, const std::string & password)
{    
    if (confirm == password)
        return true;
    else
        return false;        
}

bool confirmExit(const std::string & confirm, char exitChar)
{
    int size = confirm.size();
    if (1 == size) {
        return confirm[0] == exitChar;
    }
    else {
        return false;
    }
}

bool checkData(const std::string & adminData, const std::string & input)
{
    if (adminData == input) {
        return true;
    }
    else {
        return false;
    }
}

А, вообще, лучше создать класс.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.