Проверка пароля

Никак не могу понять, как сделать чтобы при разных паролях выдавалась разная информация. Например:Есть 2 пароля, 1-это 12345, а 2-это 2345. При вводе 12345 выдавались имя и фамилия (для примера), а при вводе 2345, год рождения

 функция_1
 {
 вывод << Введите первый пароль:
 ввод >> первый_пароль
 если(первый_пароль равно первый_правильный_пароль)
 {
      вывод << ФИО
      функция_2
 }
 иначе
 {
      вывод << ошибка
      функция_1
 }
 }

 функция_2
 {
 вывод << введите второй пароль:
 ввод >> второй_пароль
 если(второй_пароль равно второй_правильный_пароль)
 {
      вывод << год рождения
 }
 иначе
 {
      вывод << ошибка
      функция_2        // или функция_1
 }
 }

Slonopotam, ерунду написал. Во-первых, твой псевдокод не соответствует тому, что просил Тимур. Во-вторых, на фига здесь рекурсия??? Если достаточно долго вводить неправильный пароль (например, положить кирпич на Enter), то программа вылетит по переполнению стека.

Тимур, эта задача не на проверку пароля, а на нахождение соответствия среди набора пар (ключ, значение). Можно конечно ключ обозвать «паролем», но как видишь это сбивает с толку.

Можно написать так:

#include <iostream>
#include <string>

using namespace std;

struct KeyValue {
    string key, value;
};

KeyValue the_data[] {
    { "12345", "Ivan Pupkin" }, 
    { "2345", "2000" } 
};

void find_it(const string & str) {
    bool found = 0;
    int i;
    for (i = 0; i < sizeof(the_data) / sizeof(KeyValue); ++i) {
        if (the_data[i].key == str) {
            found = true;
            break;
        }
    }
    if (found) {
        cout << "Value: " << the_data[i].value << endl;
    }
    else {
        cout << "incorrect key\n";
    }
}

int main() {
    string key;
    do {
        cout << "Key: ";
        getline(cin, key);
        find_it(key);
    } while (true);
}

А если использовать шаблон map из STL, то получится проще:

#include <iostream>
#include <string>
#include <map>

using namespace std;

map<string, string> the_data { 
    { "12345", "Ivan Pupkin" }, 
    { "2345", "2000" } 
};

void find_it(const string & str) {
    auto it = the_data.find(str);
    if (it == the_data.end()) {
        cout << "incorrect key\n";
    }
    else {
        cout << "Value: " << it->second << endl;
    }
}

int main() {
    string key;
    do {
        cout << "Key: ";
        getline(cin, key);
        find_it(key);
    } while (true);
}

Можно обойтись и без структуры и map, и захардкодить строки. Что-то типа

if (key == "12345") { value = "Ivan Pupkin"; }
else if (key == "2345") { value = "2000"; }
else { cout << "incorrect"; }

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

Лом, ты переоцениваешь уровень подготовки большинства пользователей задающих вопросы на этом сайте. :) Сайт высвечивается в поиске как «Уроки программирования на C++ с нуля — Code-Live.ru» И те кто попадает на него таким путём, как правило только начинаю изучать программирование и собственно и ищут «уроки с нуля». Если Тимур из этой категории (доподлинно я конечно не знаю, но его вопрос на это наводит), то весьма вероятно, что он впервые познакомился с функциями по 6 уроку данного сайта и теперь впервые пытается что-нибудь накодить с использованием функций, самостоятельно сформулировав себе задачу. В этом случае ему очень трудно будет разобраться с твоим кодом, а мой нубский псевдокод как раз то, что он должен понять. Но, в любом случае, теперь ему есть из чего выбрать! ))

Slonopotam, я уже примерно представляю уровень большинства пользователей сайта :) Поэтому и накидал несколько вариантов. Я так считаю, что если учиться, то учиться сразу правильно, что бы потом не переучиваться. И вроде в моем первом варианте программы ничего зубодробительного нет.

Гм... сейчас посмотрел «уроки» и не обнаружил struct. Примитивные типы данных, и то не полностью, и сразу class. И даже при описании классов нет упоминания про структуры :( А ведь есть еще и union.

А чем плох твой псевдокод я написал в первом абзаце своего предыдущего поста.


И, кстати, еше заметил, что похоже ответы на заданные здесь вопросы никого не интересуют. Есть несколько человек, которые тусуются на сайте. Но вопросы задают не они.

И даже при описании классов нет упоминания про структуры :(

Для C++ разница лишь в дефолтном доступе и типе наследования,
так что что class, что struct — одна малина.
Хотя стоило бы упомянуть такие вещи как trivial-class,
standard-layout class и POD, но уровень не тот же. :)

И, кстати, еше заметил, что похоже ответы на заданные здесь вопросы никого не интересуют. Есть несколько человек, которые тусуются на сайте. Но вопросы задают не они.

Я могу задать вопросы, но врядли
здесь кто-то на них ответит,
поэтому как-то даже смысл теряется.
Лучше сразу обратиться к знакомому разработчику,
специализация которого наиболее близка к вопросу.

Здесь даже есть «разминка для мозгов»,
которую тоже никто не смотрит.

Я так считаю, что если учиться, то учиться сразу правильно, что бы потом не переучиваться

Вот тут согласен.
Иначе учиться водить автомобиль нужно начинать
с управления гужевой повозкой и верховой езды.

И вроде в моем первом варианте программы ничего зубодробительного нет.

Да и во втором тоже. Хотя можно выбрать unordered_map,
раз уж основная задача — поиск и упорядочение не важно.

Хотя стоило бы упомянуть такие вещи как trivial-class,
standard-layout class и POD, но уровень не тот же. :)

А вот с этого места можно поподробнее?

Еле нашел твою «разминку для мозгов» в третьем десятке тем форума.
Я там написал мессагу, но она почему-то пошла на модерацию. Вроде до сих пор все мессаги сразу появлялись.

Еле нашел твою «разминку для мозгов» в третьем десятке тем форума

Эту: https://code-live.ru/forum/cpp/5416/ ???

А вот с этого места можно поподробнее?

Можно, но если только много позже.

Помогите исправить парочку строк этой программы

#include <iostream>
#include <string>
using namespace std;
int main() {
    int pas;
    cout << "Password: ";
    cin >> pas;
    if ("pas" == "123456789"){
        cout << "9";
    } else 
        if ("pas" == "12345678") {
            cout << "8";
    } else 
            if ("pas" == "1234567") {
                cout << "7";
    } else
        cout << "Error";
         cout << endl;
         system("pause");
}

Что не так в это программе. Она при любом пароле выдает Error

Еле нашел твою «разминку для мозгов» в третьем десятке тем форума

Эту: https://code-live.ru/forum/cpp/5416/ ???

Эту. Только почему-то когда я туда что-то пишу, оно отправляется «на модерацию». И с концами :(

Модератор, в моем посте что-то не так? О_о

Модератор, в моем посте что-то не так?

Раз в месяц может залезут. )))

Мой пост в «разминке для мозгов» наконец прошел модерацию.

Мой пост в «разминке для мозгов» наконец прошел модерацию.

Выложил свой вариант

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

Ответить

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

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

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

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

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

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