Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nalik
39 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 646
#1

Cделать проверку по ключу - C++

18.04.2014, 22:29. Просмотров 407. Ответов 7
Метки нет (Все метки)

Помогите пожалуйста разобраться. В программе нужно сделать проверку по ключу, то есть если ключ который находится в файле .txt совпадает с тем, что находится в коде в программе и занесён в переменную, то программа продолжает работать.

Есть такой вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        string s1; //Переменная будет считывать строку 
        string key1 = ("222222","111111", "123456"); //переменная в которой ключи
 
    ifstream in ("D:\\key.txt"); //Открываем файл для считывания информации 
    in>>s1; //считываем строку
    in.close(); // Закрываем файл
 
    if (key1 == s1) //делаем проверку, если любая строка из переменной key1 равняется переменной s1 (тексту который находится в файле), то пишем "пароль подходит"
    {
        cout << "пароль подходит\n";
    }
    else
    {
        cout <<"пароль не верный\n";
        cout << "пароль в файле: " << s1 << "\n" << "пароль в переменной: " << key1 << "\n\n";
    }
Проблема в том, что переменной key1 всегда присваивается строка 123456, первые две она вообще не видит и соответственно если в файл txt занесен текст "222222" или "111111" программа выдает сообщение, что пароль не верный..
Может кто нибудь знает где в коде ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 22:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Cделать проверку по ключу (C++):

Cделать проверку на истинность всех элементов массива bool - C++
есть массив из bool как сделать проверку на истинность всех элементов массива?

cделать в шаблоне - C++
Даны вещественные числа a,b,c,d,e,f.Переменноый S присвоить значение 1,если оба уравнения ах2 + bх + с = 0 и dx2 + ex + f = 0.для...

Cделать перебор id-ов - C++
есть ссылка: http//:fafaf.ru/index.php?id=1000 нужно сделать перебор id ов как это замутить? в цикле сделать перебор и...

Cделать структуру TRAIN - C++
Необходимо сделать структуру TRAIN с полями: - название пункта назначения; - номер поезда; - время отправления. ...

Cделать пользовательский интерфейс - C++
Всем доброе утро!! Помогите пожалуйста сделать пользовательский интерфейс к задачке.

как cделать простую задачу на С++ - C++
Проверить, есть ли одинаковые цифры в смежных разрядах. (пожалуйста напишите код очень нужно, никогда на С++ не писал)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
18.04.2014, 22:31 #2
Nalik, делайте массив, а не 1 переменную. Иначе у вас происходит 3 присвоения и по итогу key1 равен последнему ключу.
C++
1
string key1[3] = {"222222","111111", "123456"};
MastAKK
18.04.2014, 22:35
  #3

Не по теме:

string - класс, а не оператор

Nalik
39 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 646
18.04.2014, 22:39  [ТС] #4
В этом случае подчеркивает знак ">>" в коде:
C++
1
in>>s1; //считываем строку
и соответственно выдает ошибку:
while trying to match the argument list '(std::ifstream, std::string [3])'

Добавлено через 24 секунды
MastAKK, буду знать, спасибо)

Добавлено через 3 минуты
Первым делом я использовал массив, но отказался, так как выдает ошибку соответствия классов(
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
18.04.2014, 22:39 #5
Nalik, а вот это не должно быть. Покажите, как сейчас выглядит код
Nalik
39 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 646
18.04.2014, 22:44  [ТС] #6
Вот)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    string s1[3]; //Переменная будет считывать строку 
    string key1[3] = {"222222","111111", "123456"};
    
 
    ifstream in ("D:\\key.txt"); //Открываем файл для считывания информации 
    in>>s1; //считываем строку
    in.close(); // Закрываем файл
 
    if (s1 == key1)
    {
        cout << "пароль подходит\n";
    }
    else
    {
        cout <<"пароль не верный\n";
        cout << "пароль в файле: " << s1 << "\n" << "пароль в переменной: " << key1 << "\n\n";
    }
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
18.04.2014, 22:46 #7
Nalik, переменную s1 как раз не надо делать массивом. Вы же читаете из файла только 1 пароль. Потому и выдавал ошибку, что вы неправильно к массиву обращались. Вы с массивами видимо не умеете работать?
Nalik
39 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 646
19.04.2014, 00:11  [ТС] #8
К сожалению не приходилось с ними работать, исправил s1 на просто string, но ошибку теперь выдает в другом месте..
подчеркивает красным "=="
C++
1
if (key1 == s1)
я так понимаю, я снова как-то не правильно обращаюсь к массиву?
Пробовал так:
C++
1
if (s1 (key1))
и так
C++
1
if (s1 [key1])
и ещё несколько вариантов, но всё не работает

подскажите пожалуйста в чём ошибка..

Добавлено через 11 минут
а если я пишу вот так:
C++
1
if (s1 == key1[3])
то программа ошибок не подчеркивает, но выдает ошибку при запуске с вариантами Break и Continue

Добавлено через 7 минут
Так заработало, но проблемы не решило..
C++
1
if (s1==key1[0], s1==key1[1])
В таком варианте, тоже учитывается лишь последнее значение, то есть если пароль в файле txt "222222", то выдаёт неверный пароль, если пароль в файле "111111", то пароль верный.. то есть проверяется только это:
s1==key1[1]

Добавлено через 40 минут
Подскажите пожалуйста как проверять текст из файла на соответствие с текстом по всему массиву и если в массиве есть одинаковый текст с текстом из файла, то выдавать, что пароль правильный?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 00:11
Привет! Вот еще темы с ответами:

Cделать вывод первого вхождения в строку - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include &quot;iostream&quot; using namespace std; void...

Cделать конструктор по умолчанию и копирования для класса - C++
Вот у меня класс строка: class strg { char *str; int len; public: strg(); strg(const strg &amp;); }; реализация:

Cделать вывод массива на экран по 15 чисел в строку - C++
В данном коде, в исходном и в обработанном массиве, необходимо сделать вывод на экран по 15 чисел в строку. Пытался поставить...

Cделать программу, реализующую учет, подсчет и хранение данных - C++
Подскажите! Закончил изучение книги - Дейтел: Как программировать на С++, в основном все ясно, а что не ясно - не критично, со временем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.04.2014, 00:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru