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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Парсинг и валидация записи числа http://www.cyberforum.ru/cpp-beginners/thread752378.html
Дана запись числа: Все дробные числа пишутся в знаковом десятичном формате с плавающей запятой со знаковым порядком. Знак + числа в целом опускается. Если число равно нолю, то: знак числа в целом опускается, а порядок равен нолю. Знак порядка опускается только, если порядок равен нолю. Разделитель мантиссы и порядка – буква "E" верхнего регистра. Разделитель целой и дробной части мантиссы –...
C++ Определить число вхождений в строку подстроки "аба", вывести символы строки, не являющейся буквами или цифрами решить нужно в течении часа определить число вхождений в строку подстроки "аба" вывести символы строки не являющейся буквами или цифрами http://www.cyberforum.ru/cpp-beginners/thread752366.html
Для енама нельзя перегружать операторы? C++
Для енама нельзя перегружать операторы?
Ошибка компилятора C2360 C++
Здравствуйте,форумчане) Я тут переделываю загрузчик модели,чтобы мог не один начальный меш загрузить,а все,которые есть на сцене.В итоге пользуюсь контейнером vertex. Значит,если кто не знает,в формате .3ds всё разбито оп блоком(бинарное всё)Эти блоки я определяю switch'ем. Вот кусок кода: case 0x4100: Mesh mesh; unsigned short numVerts, numTris,nTexCoord; break; case...
C++ Итерация http://www.cyberforum.ru/cpp-beginners/thread752332.html
Что такое итерационные вычисления? В чём их суть? В чём отличие методов:по определению с предусловием и с элементом с предусловием?
C++ Detours express 3.0 Компиляция Вообщем проблема с созданием готовых библиотек Скачать с офф сайта http://research.microsoft.com/en-us/projects/detours/ Не могу сделать готовые файлы для своего проекта... Прошу помощи Добавлено через 23 часа 40 минут Подниму. подробнее

Показать сообщение отдельно
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
04.01.2013, 12:31     Функция неправильно сравнивает содержимое файла и элемента структуры
Вот такая ситуация... Есть клочек кода:
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 я считываю инфу из файла и сравниваю с тем, что я ввёл... как правильно написать функцию? Где я жестко ошибся?...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru