Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 94
1

Работа с файлами, чтение данных, вывод данных в массив

14.01.2020, 18:32. Показов 1176. Ответов 12
Метки нет (Все метки)

Ребят, нужна Ваша помощь, только начинаю изучать программирование. Хочу написать по типу авторизации, все сделал, но не получается вывести данный с файла, занести их в массив и потом пройтись по этому массиву с помощью функции и сравнить с введенными данными, если введенный логин = логину находившемуся в файле то вывести сообщение об успешному входу в аккаунт . Вот сам код : ( СМОТРЕТЬ ТАМ ГДЕ VALUE == 2 , все остальное работает как нужно )
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
int main() {
setlocale(0, "");
bool access = false;
const int N = 20; //массив данных, не важно сколько их указано
string massive[N];
string path = "test.txt";
fstream file;
 
file.open(path, fstream::in | fstream::out | fstream::app);    // файл на ввод и вывод данных с сохранением
if (!file.is_open()) return 1;    // если не удалось открыть файл - завершить программу
else {
    string login;
    int value;
    cout << "Файл успешно открыт!"<<endl;
    cout << "Выберите действие : \n1 - Зарегистрироваться \n2 - Войти в аккаунт \n3 - Показ всех данных" << endl;
    cout << "Введите действие : ";
    cin >> value;
 
    system("cls");
    if (value == 1) { //внесение логина в файл
        string addLogin;
        cout << "Введите ваш login : ";
        cin >> addLogin;
        file << addLogin << "\n";
        cout << "Ваш аккаунт зарегистрирован успешно!" << endl;
        }
    if (value == 2) { //смотреть этот блок кода, то что выводит данные в ком строку это точно, я проверял
        string enteredLogin; // логин который вводи пользователь
        cout << "Введите Ваш login : ";
        cin >> enteredLogin;
 
        for (int i = 0; i < N; i++) {
            while (!file.eof()){
                massive[i] = "";
                file >> massive[i];
                if (enteredLogin == massive[i]) access = true; 
                else access = false; 
                }
        }
        if (access == true)  cout << "Вход в " << enteredLogin << " аккаунт выполнен успешно !" << endl; 
        else if (access == false) cout << "Не правильно введены данные, попробуйте еще раз !" << endl; 
    }
    else if (value == 3) { //просто вывод данных
        cout << "Данные в файле : " << endl;
        while (!file.eof()) {
            login = "";
            file >> login;
            cout << login << endl;
        }
        
    }
file.close();
return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2020, 18:32
Ответы с готовыми решениями:

Работа с файлами (запись/чтение данных из бд)
Здравствуйте. Есть код(рабочий) #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;time.h&gt;...

Ввод, вывод данных в Delphi и работа с файлами
Помогите составит прогу, которая выполняет такие действия: Ввод данных. При нажатии на кнопку...

Тема: Работа с внешними файлами. Ввод, вывод данных в текстовый файл
Файл прикреплен к сообщению, нужно написать программу: данные из текстового файла необходимо с...

Работа с данными файлов Excel .xlsx. Чтение и вывод данных с использованием модуля openpyxl
Здравствуйте! Пытаюсь освоить работу чтения и записи данных в таблицы Excel, используя Python и его...

12
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
14.01.2020, 18:45 2
Лучший ответ Сообщение было отмечено origami111 как решение

Решение

Цитата Сообщение от origami111 Посмотреть сообщение
if (enteredLogin == massive[i]) access = true;
                else access = false;
А если логин правильный, не будет ли нормально закончить проверку (break; )? Может дальше будет что то не правильно и оно его сбросит на false
1
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 94
14.01.2020, 18:50  [ТС] 3
Дописал, но все равно при вводе логина, в проверке выдает что логин введен неправильно
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
14.01.2020, 18:51 4
Цитата Сообщение от origami111 Посмотреть сообщение
Дописал, но все равно при вводе логина, в проверке выдает что логин введен неправильно
А что говорит отладчик?
0
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 94
14.01.2020, 18:53  [ТС] 5
Цитата Сообщение от AndryS1 Посмотреть сообщение
А что говорит отладчик?
Отладчик ничего не говорит, в отладчике все идет как нужно, только после того как я ввожу свой логин на проверку(который точно есть в файле) выдает 41 строку кода
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
14.01.2020, 19:00 6
Цитата Сообщение от origami111 Посмотреть сообщение
Отладчик ничего не говорит, в отладчике все идет как нужно, только после того как я ввожу свой логин на проверку(который точно есть в файле) выдает 41 строку кода
Тогда читаем зачем нужен отладчик

Поставьте точку останова на 36-ую строку, что идёт в обеих переменных? (enteredlogin и massiv[i])
0
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 94
14.01.2020, 19:10  [ТС] 7
Цитата Сообщение от AndryS1 Посмотреть сообщение
Тогда читаем зачем нужен отладчик

Поставьте точку останова на 36-ую строку, что идёт в обеих переменных? (enteredlogin и massiv[i])
И в enteredLogin и в massiv[i] идет одинаковый логин,в моем случае qwerty.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
14.01.2020, 19:14 8
Цитата Сообщение от origami111 Посмотреть сообщение
И в enteredLogin и в massiv[i] идет одинаковый логин,в моем случае qwerty.
Проблема скорее всего в спец. символах, через отладчик не видно были разницы в \n или \0?

Добавлено через 2 минуты
и немного странно выглядит
C++
1
2
if(access == true) 
else if (acces == false)
я бы написал
C++
1
2
if(access) 
else
0
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 94
14.01.2020, 19:18  [ТС] 9
Цитата Сообщение от AndryS1 Посмотреть сообщение
Проблема скорее всего в спец. символах, через отладчик не видно были разницы в \n или \0?

Добавлено через 2 минуты
и немного странно выглядит
C++
1
2
if(access == true) 
else if (acces == false)
я бы написал
C++
1
2
if(access) 
else
Разницы в спец символах вроде не видно, и с if else разницы особой нет как писать,
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
14.01.2020, 19:21 10
Цитата Сообщение от origami111 Посмотреть сообщение
Разницы в спец символах вроде не видно
Вы думаете обнаружили баг оператора == для строк в STL?)

Добавлено через 1 минуту
Ладно, если отладка отладчиком не проходит, сделайте отладочный вывод
Если строки не правильные - начните свой посимвольный разбор этих строк и выводите разницу в символах
(для явности может лучше указывать какой символ по счёту, можно просто не заметить служебного)
0
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 94
14.01.2020, 20:08  [ТС] 11
Цитата Сообщение от AndryS1 Посмотреть сообщение
Вы думаете обнаружили баг оператора == для строк в STL?)

Добавлено через 1 минуту
Ладно, если отладка отладчиком не проходит, сделайте отладочный вывод
Если строки не правильные - начните свой посимвольный разбор этих строк и выводите разницу в символах
(для явности может лучше указывать какой символ по счёту, можно просто не заметить служебного)
Не думаю что ошибка в ==, попробую сделать как Вы сказали, проверю напишу

Добавлено через 40 минут
Цитата Сообщение от AndryS1 Посмотреть сообщение
Вы думаете обнаружили баг оператора == для строк в STL?)

Добавлено через 1 минуту
Ладно, если отладка отладчиком не проходит, сделайте отладочный вывод
Если строки не правильные - начните свой посимвольный разбор этих строк и выводите разницу в символах
(для явности может лучше указывать какой символ по счёту, можно просто не заметить служебного)
Видимо ошибка была в массивах. Переделал без массива, всё работает, так же убрал цикл for, вот рабочий код :
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
if (value == 2) {
            string enteredLogin;
            cout << "Введите Ваш login : ";
            cin >> enteredLogin;
 
                while (!file.eof()) {
                    login = "";
                    file >> login;
                    if (enteredLogin == login) {
                        access = true;
                        break;
                    }
                    else {
                        access = false;
                    }
                }
            
            if (access) { 
                cout << "Вход в " << enteredLogin << " аккаунт выполнен успешно !" << endl; 
            }
            else { 
                cout << "Не правильно введены данные, попробуйте еще раз !" << endl;
            }
        }
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
14.01.2020, 20:17 12
А теперь радуйтесь! Вы решили проблему сами!
Довольно редкое явление)
0
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 94
14.01.2020, 20:19  [ТС] 13
Цитата Сообщение от AndryS1 Посмотреть сообщение
А теперь радуйтесь! Вы решили проблему сами!
Довольно редкое явление)
Благодарю за помощь !)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2020, 20:19

Работа с файлами данных
Средствами текстовых редакторов подготовить файл, содержащий два столбика числовых значений...

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

Работа с файлами (обновление данных)
Здравствуйте. Как вы думаете, возможно ли заменить данные в файле не переписывая весь файл? То есть...

EF работа с файлами и базой данных
Добрый день. Есть программа, в ней присутствуют объекты, к каждому объекту должен быть прикреплён...

Чтение JSON и вывод данных
Собственно есть файл: { &quot;result&quot;: { &quot;items&quot;: } Подскажите пожалуйста, как мне...

Работа с файлами+комбинированные типы данных
Всем доброго времени суток, мне задали вот такую задачу: Информация бо участниках спортивных...


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

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

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