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

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

Войти
Регистрация
Восстановить пароль
 
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
#1

Функция неправильно сравнивает содержимое файла и элемента структуры - C++

04.01.2013, 12:31. Просмотров 398. Ответов 4
Метки нет (Все метки)

Вот такая ситуация... Есть клочек кода:
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <locale.h>
#include <vector>
#include <conio.h>
using namespace std;
 
struct user
{
    char login[22], password[22];
    int status;
};
 
bool proverca ()
{
    user s;
    FILE *p;
    int n;
    char pas[21];
    p=fopen("pasford.txt","r+b");
    while(!feof(p))
    {
        fscanf(p,"%s", &pas);
        if(strcmpi(pas,s.password))
            return true;
        else
            return false;
    }
}
 
bool UsersMatch(user A, user B)
{
    if (strstr(A.login,B.login) && strstr(A.password,B.password))
        return 1;
    return 0;
}
 
void setText (char *str, int size)
{
    int i = 0;
    char ch;
    do
    {
        scanf("%c",&ch);
        str[i] = ch;
        i++;
        if (str[0] == 10)
        {
            printf("Нельзя вводить пустую строку! Повторите ввод...\n");
            i=0;
        }
        else 
            if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || ch == 10)
            {
                if(i == size-1)
                {
                    do
                    {
                        scanf("%c",&ch);
                    }
                    while (ch != 10);
                    printf("Слишком длинная строка, пожалуйста, введите строку заново:\n");
                    i = 0;
                }
            }
            else
            {
                printf("Ведены недопустимые знаки, доступны лишь буквы латинского алфавита и цифры\n");
                do
                {
                    scanf("%c",&ch);
                }
                while (ch != 10);
                i = 0;
            }
    }
    while ((i == 0 || ch != 10) && i < size-1);
    str[i-1] = '\0';
    return;
}
 
const char ENTER = 13;
const char BACKSPACE = 8;
 
int main()
{
    setlocale(LC_ALL,"rus");
    user us;
    int i = 0;
    bool fl;
    fl=0;
    printf("Введите логин: ");
    setText(us.login, 20);
    printf("Введите пороль: ");
    char ch;
    do
    {
        while((ch = _getch()) != ENTER)
        {
            if (i < 21)
            {
                fl = 0;
                us.password[i]= ch;
            }
            else
                fl = 1;
            if (ch == BACKSPACE && i > 0)
            {
                i--;
                cout << "\b" << " " << "\b";
            }
            else if (ch != BACKSPACE)
            {
                i++;
                cout << '*';
            }
        }
        if (fl)
        {
            fl = 0;
            i = 0;
            cout << endl << "Неверный пороль. Пожалуйста повторите ввод: ";
        } 
        else 
            if (i == 0)
            {
                cout << endl << "Пароль не может быть пустым" << endl << "Пожалуйста, повторите ввод: ";
            }
    }
    while(!i);
    us.password[i] = '\0';
    if(proverca())
        printf("\nBсе хорошо...");
    else
        printf("\nBсе плохо...");
    getch();
    return 0;
}
Проблема состоит в том, что в main в структуру user переменную password всё записывается адекватно, записываю в этом клочке:
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
    printf("Введите пороль: ");
    char ch;
    do
    {
        while((ch = _getch()) != ENTER)
        {
            if (i < 21)
            {
                fl = 0;
                us.password[i]= ch;
            }
            else
                fl = 1;
            if (ch == BACKSPACE && i > 0)
            {
                i--;
                cout << "\b" << " " << "\b";
            }
            else if (ch != BACKSPACE)
            {
                i++;
                cout << '*';
            }
        }
        if (fl)
        {
            fl = 0;
            i = 0;
            cout << endl << "Неверный пороль. Пожалуйста повторите ввод: ";
        } 
        else 
            if (i == 0)
            {
                cout << endl << "Пароль не может быть пустым" << endl << "Пожалуйста, повторите ввод: ";
            }
    }
Но, когда я вызываю функцию proverca, она всегда возвращает значение true и к тому же нифига не читает то, что я записал в password... в функции proverca я считываю инфу из файла и сравниваю с тем, что я ввёл... как правильно написать функцию? Где я жестко ошибся?...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 12:31     Функция неправильно сравнивает содержимое файла и элемента структуры
Посмотрите здесь:

Неправильно сравнивает - C++
Нужно проверить , что цвет не КРАСНЫЙ.НО при ТРАССИРОВКЕ выводит что цвет всегда не красный в чём проблема. Делал через структуру. ПОМОГИТЕ...

Неправильно сравнивает строки wchar_t* и std::wstring - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; using namespace std; wchar_t str =...

Удаление элемента структуры из файла - C++
Хочу сделать подобие телефонного справочника, чтобы были функции создания базы данных, её просмотра, добавление и удаление абонента, поиск...

Какая функция сравнивает строку s2 со строкой s1? - C++
Какая функция сравнивает строку s2 со строкой s1?

Функция которая сравнивает текущую дату с заданной - C++
У меня есть функция для получения текущей даты, но я не знаю как записать, сравнить и узнать какая дата раньше чем сегодня или больше. И...

Удаление элемента структуры для правильного считывания WAV-файла - C++
Господа, возник такой вопрос: Мне необходимо удалить элемент структуры. Это необходимо для правильного считывания WAV-файла, не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
04.01.2013, 12:39     Функция неправильно сравнивает содержимое файла и элемента структуры #2
Собственно, что за ерунда просходит в функции со страшным названием proverca? Создается новая структура, поля которой никак не инициализированы и происходит попытка сравнения с тем, что считано из файла.
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
04.01.2013, 13:34  [ТС]     Функция неправильно сравнивает содержимое файла и элемента структуры #3
И как быть? как должна выглядить функция?
P.S.
И согласен... название страшное =)
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
04.01.2013, 13:38     Функция неправильно сравнивает содержимое файла и элемента структуры #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool proverca ( user s)
{
    FILE *p;
    int n;
    char pas[21];
    p=fopen("pasford.txt","r+b");
    while(!feof(p))
    {
        fscanf(p,"%s", &pas);
        if(strcmpi(pas,s.password))
            return true;
        else
            return false;
    }
}
и соответственно вызов
C++
1
if(proverca(us))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2013, 13:41     Функция неправильно сравнивает содержимое файла и элемента структуры
Еще ссылки по теме:

Функция сравнивает две строки, игнорируя различия в регистрах - C++
Я студент 1 курса на зачёт сказали написать программку помогите!! не хочу вылететь из универа С++ Консоль 1. Функция сравнивает...

Сравнивает ли значения функция srtcmp, если они введены русскими буквами? - C++
Сравнивает ли значения функция srtcmp,если они введены русскими буквами?

Удалить элемент структуры с заданным номером медицинской карты, добавить 2 элемента в начало файла - C++
1. Структура &quot;Пациент&quot;: - Фамилия, имя, отчество; - Домашний адрес; - Номер медицинской карты; - Номер страхового полиса. Удалить...

С++ Необъявленный идентификатор при работе с классами. (Функция сравнивает значение свойств объектов) - C++
На идентификаторы power top_speed acceleration weight по 4 раза на каждый матюкается компилятор. Как правильно сравнить их содержимое? ...

Функция которая сравнивает два целых числа и возвращает результат сравнения в виде знака: >, < или = - C++
Используя функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде знака: &gt;, &lt; или =, вычислить количество...

Структуры. Неправильно считывает строку - C++
Само задание: В текстовом файле хранится база отдела кадров предприятия. Каждая строка файла содержит запись об одном сотруднике. Формат...


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

Или воспользуйтесь поиском по форуму:
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
04.01.2013, 13:41  [ТС]     Функция неправильно сравнивает содержимое файла и элемента структуры #5
Спасибо, всё работает =)
Yandex
Объявления
04.01.2013, 13:41     Функция неправильно сравнивает содержимое файла и элемента структуры
Ответ Создать тему
Опции темы

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