1 / 1 / 2
Регистрация: 01.07.2014
Сообщений: 49
1

Программа входа и регистрации

01.07.2014, 20:11. Показов 1246. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Я написал для себя программку: она записывает логин и пароль в файл, а затем сверяет его в следующий раз при логине.
Проблема состоит в том что логин и пароль сохраняются кракозяброй(ввожу по английски), и как результат не может сравнить с тем чем ввожу при логине. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
using namespace std;
 
ifstream* openFile()
{
    ifstream* pFileStream = 0;
    for(;;)
    {
        char fileName[50] = {'l', 'o', 'g', 'i', 'n', 's', '_', 'p' ,'a', 's', 's', 'w', 'o', 'r', 'd', 's', '.', 't', 'x', 't'};
        //îòêðûâàåì ôàéë äëÿ ÷òåíèÿ
        //íå ñîçäàâàòü, åñëè íå ñóùåñòâóåò
        pFileStream = new ifstream(fileName);
        if (pFileStream->good())
        {
            break;
        }
        cerr << "Невозможно открыть файл. " << fileName << endl;
        delete pFileStream;
    }
    return pFileStream;
}
 
int register_()
{
    char login[40];
    char password[40];
    char theLogPass[100];
    cout << "Введите логин " << endl;
    cout << "->";
    cin >> login;
    cout << "Введите пароль " << endl;
    cout << "->"; 
    cin >> password;
    theLogPass[100] = login[40] + password[40];
    // çàïèñü äàííûõ
    ofstream fout("logins_passwords.txt", ios::app);
    fout << theLogPass;
    fout << endl;
    fout.close();
    cout << "Вы успешно зарегистрированы!!!" << endl;
}
 
int loginer()
{
    char the_log[40];
    char the_pass[40];
    char the_log_pass[100];
    cout << "Введите свой логин" << endl;
    cout << "->";
    cin >> the_log;
    cout << "Введите пароль" << endl;
    cout << "->";
    cin >> the_pass;
    the_log_pass[100] = the_log[40] + the_pass[40];
    cout << the_log_pass << endl;
    
    //ïîëó÷åíèå ôàéëîâîãî ïîòîêà
    ifstream* pFileStream = openFile();
    
    //îñòàíîâèòñÿ ïî äîñòèæåíèþ êîíöà ôàéëà
    while (!pFileStream->eof())
    {
        //÷òåíèå çíà÷åíèÿ
        char value[100];
        (*pFileStream) >> value;
        
        // îñòàíîâêà ïðè îøèáêå ÷òåíèÿ
        //(íàïðèìåð, ñ÷èòûâàåòñÿ íå öåëîå ÷èñëî, èëè
        //ñ÷èòàí ñèìâîë íîâîé ñòðîêè ïîñëå êîòîðîãî 
        //íè÷åãî íåò
        if (pFileStream->fail()){
            break;
        }
        //âûâîä ñ÷èòàííîãî çíà÷åíèÿ
        if(value == the_log_pass){
            cout << "Доступ разрешен" << endl;
        }else{
            cout << "Ошибка аунтефикации!!!" << endl;
        }
    }
    delete pFileStream;
}
 
 
 
int main ()
{
    setlocale(LC_ALL, "");
    string v_log = "login";
    string v_reg = "register";
    string otvet;
    
    cout << "Привет!!! \nТебе нужно войти " 
    << "или зарегистрироваться." << endl;
    cout << "Введите login чтобы войти или register чтобы зарегистрироваться." << endl;
    cout << "->";
    cin >> otvet;
    
    if(otvet == v_log){
        loginer();
    }
    if(otvet == v_reg){
        register_();
    }
    system("pause");
    return 0;
}
Пожалуйста скажите в чем проблема.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2014, 20:11
Ответы с готовыми решениями:

Программа для входа/регистрации с использованием БД Access
Нужно создать программу для входа/регистрации. Данные (логин, пароль и т.д.) хранятся в базе данных...

Формы регистрации и входа
Добрый день. Возникла проблемка с выполнением задания. Моя задача сделана по примеру товарища, но...

Система регистрации и входа
Здравствуйте Делаю систему регистрации и входа на сайте. При открытии сайта вылетает ошибка:...

Окно входа и регистрации
День добрый, уважаемые форумчане!!!! думал справлюсь самостоятельно, но как-то не выходит. Вообщем...

15
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
01.07.2014, 20:19 2
Цитата Сообщение от saharok2000 Посмотреть сообщение
the_log_pass[100] = the_log[40] + the_pass[40];
Это что за чудо?
Так можно только со string.
char массивы надо самому копировать
C++
1
2
strcpy(the_log_pass,the_log);
strcat(the_log_pass,the_pass)
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
01.07.2014, 20:21 3
Цитата Сообщение от saharok2000 Посмотреть сообщение
char fileName[50] = {'l', 'o', 'g', 'i', 'n', 's', '_', 'p' ,'a', 's', 's', 'w', 'o', 'r', 'd', 's', '.', 't', 'x', 't'};
Оригинально, а главное не лень же было писать
0
1 / 1 / 2
Регистрация: 01.07.2014
Сообщений: 49
01.07.2014, 20:38  [ТС] 4
zss, спасибо.
Kerry_Jr, просто я пытался вставить страйнг, но компилятор возмущался.

Добавлено через 6 минут
zss,
[Error] 'strcpy' was not declared in this scope
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
01.07.2014, 20:44 5
Подключи <cstring>.
0
1 / 1 / 2
Регистрация: 01.07.2014
Сообщений: 49
01.07.2014, 20:46  [ТС] 6
Цитата Сообщение от nmcf Посмотреть сообщение
Подключи <cstring>.
Спасибо, сработало
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
01.07.2014, 21:03 7
Цитата Сообщение от saharok2000 Посмотреть сообщение
вставить страйнг, но компилятор возмущался.
Вы, наверное, стринг имели в виду. Не обязательно стринг. Можно ведь и так
C++
1
char fileName[50] = "logins_passwords.txt";
Это практически то же самое, что сделали Вы, но более компактно.
1
1 / 1 / 2
Регистрация: 01.07.2014
Сообщений: 49
01.07.2014, 21:14  [ТС] 8
Kerry_Jr, я имел ввиду string;
я писал
C++
1
2
string fileName = "logins_passwords.txt";
pFileStream = new ifstream(fileName);
он возмущается
C++
1
pFileStream = new ifstream("logins_passwords.txt");
так еще больше
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
01.07.2014, 21:17 9
А зачем new? Просто
C++
1
ifstream ifs(fileName);
0
135 / 134 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
01.07.2014, 21:17 10
C++
1
std::ifstream inFile(filename);
или

C++
1
2
3
4
5
std::cin.getline(filename, SIZE);
std::ifstream inFile;
inFile.open(filename);
if ( !inFile.is_open() )
{ ... }
0
1 / 1 / 2
Регистрация: 01.07.2014
Сообщений: 49
01.07.2014, 21:28  [ТС] 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include <cstring>
using namespace std;
 
ifstream* openFile()
{
    ifstream* pFileStream = 0;
    for(;;)
    {
        char fileName[50] = {'l', 'o', 'g', 'i', 'n', 's', '_', 'p' ,'a', 's', 's', 'w', 'o', 'r', 'd', 's', '.', 't', 'x', 't'};
        //îòêðûâàåì ôàéë äëÿ ÷òåíèÿ
        //íå ñîçäàâàòü, åñëè íå ñóùåñòâóåò
        pFileStream = new ifstream(fileName);
        if (pFileStream->good())
        {
            break;
        }
        cerr << "Íåâîçìîæíî îòêðûòü ôàéë " << fileName << endl;
        delete pFileStream;
    }
    return pFileStream;
}
 
int register_()
{
    char login[40];
    char password[40];
    char theLogPass[100];
    cout << "Ïðèäóìàéòå ëîãèí " << endl;
    cout << "->";
    cin >> login;
    cout << "Ïðèäóìàéòå ïàðîëü " << endl;
    cout << "->"; 
    cin >> password;
    strcpy(theLogPass,login);
    strcat(theLogPass,password);
 
    // çàïèñü äàííûõ
    ofstream fout("logins_passwords.txt", ios::app);
    fout << theLogPass;
    fout << endl;
    fout.close();
    cout << "Âû óñïåøíî çàðåãèñòðèðîâàíû!!!" << endl;
}
 
int loginer()
{
    char the_log[40];
    char the_pass[40];
    char the_log_pass[100];
    cout << "Ââåäèòå ñâîé ëîãèí" << endl;
    cout << "->";
    cin >> the_log;
    cout << "Ââåäèòå ïàðîëü" << endl;
    cout << "->";
    cin >> the_pass;
    strcpy(the_log_pass,the_log);
    strcat(the_log_pass,the_pass);
    cout << the_log_pass << endl;
    
    //ïîëó÷åíèå ôàéëîâîãî ïîòîêà
    ifstream* pFileStream = openFile();
    
    //îñòàíîâèòñÿ ïî äîñòèæåíèþ êîíöà ôàéëà
    while (!pFileStream->eof())
    {
        //÷òåíèå çíà÷åíèÿ
        char value[100];
        (*pFileStream) >> value;
        
        // îñòàíîâêà ïðè îøèáêå ÷òåíèÿ
        //(íàïðèìåð, ñ÷èòûâàåòñÿ íå öåëîå ÷èñëî, èëè
        //ñ÷èòàí ñèìâîë íîâîé ñòðîêè ïîñëå êîòîðîãî 
        //íè÷åãî íåò
        if (pFileStream->fail()){
            break;
        }
        //âûâîä ñ÷èòàííîãî çíà÷åíèÿ
        if(value == the_log_pass){
            cout << "Äîñòóï ðàçðåøåí" << endl;
        }else{
            cout << "Îøèáêà àóíòåôèêàöèè!!!" << endl;
        }
    }
    delete pFileStream;
}
 
 
 
int main ()
{
    setlocale(LC_ALL, "");
    string v_log = "login";
    string v_reg = "register";
    string otvet;
    
    cout << "Ïðèâåò ÷åëîâåê!!! \n×òîáû ïîïàñòü â ìèð êîìïüþòåðà " 
    << "íåîáõîäèìî âîéòè èëè çàðåãèñòðèðîâàòüñÿ." << endl;
    cout << "Ââåäèòå login ÷òîáû âîéòè èëè register äëÿ ðåãèñòðàöèè." << endl;
    cout << "->";
    cin >> otvet;
    
    if(otvet == v_log){
        loginer();
    }
    if(otvet == v_reg){
        register_();
    }
    system("pause");
    return 0;
}
все равно не совпадает вводимый логин с тем что записан
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
01.07.2014, 21:43 12
82-я строка - нельзя так строки сравнивать, надо через strcmp(). С древними строками ничего делать нельзя без функций. Перейди на string, если хочешь, чтобы было как в Паскале.
0
1 / 1 / 2
Регистрация: 01.07.2014
Сообщений: 49
01.07.2014, 21:52  [ТС] 13
Цитата Сообщение от nmcf Посмотреть сообщение
82-я строка - нельзя так строки сравнивать, надо через strcmp(). С древними строками ничего делать нельзя без функций. Перейди на string, если хочешь, чтобы было как в Паскале.
Я что-то ничего не понял(и с паскалем я не знаком)
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
01.07.2014, 21:54 14
C++
1
if(strcmp(value, the_log_pass))
1
1 / 1 / 2
Регистрация: 01.07.2014
Сообщений: 49
02.07.2014, 19:41  [ТС] 15
nmcf, а все понял

Добавлено через 21 час 36 минут
Люди, я похоже совсем тупой... У меня снова не совпадает в 82 строке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include <cstring>
using namespace std;
 
ifstream* openFile()
{
    ifstream* pFileStream = 0;
    for(;;)
    {
        char fileName[50] = {'l', 'o', 'g', 'i', 'n', 's', '_', 'p' ,'a', 's', 's', 'w', 'o', 'r', 'd', 's', '.', 't', 'x', 't'};
        //îòêðûâàåì ôàéë äëÿ ÷òåíèÿ
        //íå ñîçäàâàòü, åñëè íå ñóùåñòâóåò
        pFileStream = new ifstream(fileName);
        if (pFileStream->good())
        {
            break;
        }
        cerr << "Íåâîçìîæíî îòêðûòü ôàéë " << fileName << endl;
        delete pFileStream;
    }
    return pFileStream;
}
 
int register_()
{
    char login[40];
    char password[40];
    char theLogPass[100];
    cout << "Ïðèäóìàéòå ëîãèí " << endl;
    cout << "->";
    cin >> login;
    cout << "Ïðèäóìàéòå ïàðîëü " << endl;
    cout << "->"; 
    cin >> password;
    strcpy(theLogPass,login);
    strcat(theLogPass,password);
 
    // çàïèñü äàííûõ
    ofstream fout("logins_passwords.txt", ios::app);
    fout << theLogPass;
    fout << endl;
    fout.close();
    cout << "Âû óñïåøíî çàðåãèñòðèðîâàíû!!!" << endl;
}
 
int loginer()
{
    char the_log[40];
    char the_pass[40];
    char the_log_pass[100];
    cout << "Ââåäèòå ñâîé ëîãèí" << endl;
    cout << "->";
    cin >> the_log;
    cout << "Ââåäèòå ïàðîëü" << endl;
    cout << "->";
    cin >> the_pass;
    strcpy(the_log_pass,the_log);
    strcat(the_log_pass,the_pass);
    cout << the_log_pass << endl;
    
    //ïîëó÷åíèå ôàéëîâîãî ïîòîêà
    ifstream* pFileStream = openFile();
    
    //îñòàíîâèòñÿ ïî äîñòèæåíèþ êîíöà ôàéëà
    while (!pFileStream->eof())
    {
        //÷òåíèå çíà÷åíèÿ
        char value[100];
        (*pFileStream) >> value;
        
        // îñòàíîâêà ïðè îøèáêå ÷òåíèÿ
        //(íàïðèìåð, ñ÷èòûâàåòñÿ íå öåëîå ÷èñëî, èëè
        //ñ÷èòàí ñèìâîë íîâîé ñòðîêè ïîñëå êîòîðîãî 
        //íè÷åãî íåò
        if (pFileStream->fail()){
            break;
        }
        //âûâîä ñ÷èòàííîãî çíà÷åíèÿ
        if(strcmp(value, the_log_pass)){
            cout << "Äîñòóï ðàçðåøåí" << endl;
        }else{
            cout << "Îøèáêà àóíòåôèêàöèè!!!" << endl;
            cout << "value        = " << value << endl;
            cout << "the_log_pass = " << the_log_pass << endl;
            
        }
    }
    delete pFileStream;
}
 
 
 
int main ()
{
    setlocale(LC_ALL, "");
    string v_log = "login";
    string v_reg = "register";
    string otvet;
    
    cout << "Ïðèâåò ÷åëîâåê!!! \n×òîáû ïîïàñòü â ìèð êîìïüþòåðà " 
    << "íåîáõîäèìî âîéòè èëè çàðåãèñòðèðîâàòüñÿ." << endl;
    cout << "Ââåäèòå login ÷òîáû âîéòè èëè register äëÿ ðåãèñòðàöèè." << endl;
    cout << "->";
    cin >> otvet;
    
    if(otvet == v_log){
        loginer();
    }
    if(otvet == v_reg){
        register_();
    }
    system("pause");
    return 0;
}
подскажите что не так
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
02.07.2014, 20:19 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
 
using namespace std;
 
void register_()
{
    char login[40], password[40];
 
    cout << "Придумайте логин " << endl;
    cout << "->";
    cin.getline(login, 40);
    cout << "Придумайте пароль " << endl;
    cout << "->"; 
    cin.getline(password, 40);
    // запись данных
    ofstream ofs("logins_passwords.txt", ios::app);
    ofs << login << password << endl;
    ofs.close();
    cout << "Вы успешно зарегистрированы!!!" << endl;
}
 
void loginer()
{
    char the_log[40], the_pass[40], the_log_pass[100];
 
    cout << "Введите свой логин" << endl;
    cout << "->";
    cin.getline(the_log, 40);
    cout << "Введите пароль" << endl;
    cout << "->";
    cin.getline(the_pass, 40);
    strcpy(the_log_pass, the_log);
    strcat(the_log_pass, the_pass);
    //получение файлового потока
    ifstream ifs("logins_passwords.txt");
    if(!ifs)
    {
        cerr << "Невозможно открыть файл " << "logins_passwords.txt" << endl;
        return;
    }
    char value[100];
    //остановится по достижению конца файла
    while (!ifs.eof())
    {
        //чтение значения
        ifs.getline(value, 100);
        
        // остановка при ошибке чтения
        //(например, считывается не целое число, или
        //считан символ новой строки после которого 
        //ничего нет
        if (ifs.fail()){
            break;
        }
        //вывод считанного значения
        if(strcmp(value, the_log_pass) == 0)
        {
            cout << "Доступ разрешен" << endl;
            ifs.close();
            return;
        }
    }
    cout << "Ошибка аунтефикации!!!" << endl;
        ifs.close();
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "");
    string v_log = "login";
    string v_reg = "register";
    string otvet;
    
    cout << "Привет человек!!! \nЧтобы попасть в мир компьютера " 
            << "необходимо войти или зарегистрироваться." << endl;
    cout << "Введите login чтобы войти или register для регистрации." << endl;
    cout << "->";
    getline(cin, otvet);
    
    if(otvet == v_log){
        loginer();
    }
    else
        if(otvet == v_reg){
            register_();
        }
 
    system("pause");
    return 0;
}
1
02.07.2014, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2014, 20:19
Помогаю со студенческими работами здесь

Формы регистрации и входа
Формы регистраци и входа свёрстаны в виде модальных окон. Возможно ли сделать только с помощью HTML...

Кнопка для входа и регистрации
Нужно создать форму, где будут кнопки для регистрации и входа, знаю только то, что нужно подключить...

Формы входа и регистрации в лайтбоксе
У меня на сайте (Wordpress) в меню есть ссылки на вход и регистрацию.Как сделать чтобы (вход и...

Горизонтальная форма входа/регистрации
Всем здарова, как всегда на дворе ночь и я как всегда затупил, помогите мне))) как на сайте...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru