Помощь - Поиск - Пользователи - Календарь
Полная версия: простенькая прога на запрос пароля
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Тёмный Эльф
Пароль хранится в текстовом документе, при вводе пароля пользователем прога сверяет его с тем ,что прописан в блокноте. Но странное дело, даже если вводишь правильный пароль, прога говорит, типа неверный пароль. Почему?

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

int Password();

void main()
{int k;
if (Password() == 1)
{
printf("You entered correct password!\n");
}
else
{
printf("False!");


}

getch();
}


int Password()
{
const n=10;
char s[n], p[n];
FILE *pass;
pass = fopen("password.txt","D:\TC\BIN\password.txt");
fgets(s,n,pass);
printf("Enter password:\n",n);
gets(p);
fclose(pass);

if (strcmp(s,p) == 0)
return(1);
else
return 0;
}
volvo
Ну, во-первых, все-таки открывать файл лучше вот так:
  pass = fopen("password.txt","rt");
(второй параметр задает режим - у меня записано открытие текст. файла для чтения), а во-вторых, если после пароля в файле есть перевод строки, то в s запишется "пароль\n", что естественно не будет равно паролю, введенному с клавиатуры... Поэтому перевод строки из файла надо убрать...
Тёмный Эльф
Цитата
если после пароля в файле есть перевод строки, то в s запишется "пароль\n, что естественно не будет равно паролю, введенному с клавиатуры...


Да нету там перевода по-моему..

точно такая же прога на Паскале работает, а на Си глючит почему-то..
program password;
var
pass:string;
var real_pass:string;

function pass_(var s:string):string;
Begin
assign(input,'password.txt');
reset(input);
readln(s);
close(input);
end;

Begin

Writeln('Enter password please: ',pass);
readln(pass);
pass_(real_pass);
If pass=real_pass then
Writeln('You have entered right password') else
Writeln('Error: your password is wrong');
end.
volvo
Файл с паролем прикрепи сюда (именно ПРИКРЕПИ, а не скопируй)...
Тёмный Эльф
Я конечно прикреплю файл, но дело в том .что я тут же в программе вывожу значения p и s и они равны!! но прога пишет, что вы ввели неверный пароль!!!

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

int Password();

void main()
{ clrscr();
if (Password() == 1)
{
printf("You entered correct password!\n");
}
else
{
printf("Access denied!");
}
getch();
}

int Password()
{
const n=10;
char s[n], p[n];
FILE *pass;
pass = fopen("password.txt","r");
fgets(s,n,pass);
printf("Enter password: \n",n);
printf(s);
gets(p);
printf(p);
fclose(pass); /*здесь s = p*/

if (s==p)
return(1);
else
return 0; /*функция возвращает 0 но почему??*/
}
Fanat
Если не ошибаюсь у тебя пробел после password... smile.gif
Тёмный Эльф
Цитата
Если не ошибаюсь у тебя пробел после password... smile.gif


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

Добавлено через 3 мин.
и вот еще доказательство того, что там нет пробела: когда прога выводит
printf(s); 
, то выводится "password" без всяких пробелов. вот. не знаю, в чем дело. =(
volvo
Ну, и кто тебя учил СТРОКИ сравнивать через "==" ? blink.gif

if (strcmp(s, p) == 0)
return(1);
else
return 0;

и все работает...

(это, кстати, во-вторых... А во-первых, я понял, что ты НЕ читаешь того, что я пишу... Зачем же я пишу? Я что, где-то говорил, что надо открывать файл как
pass = fopen("password.txt","r");
? Не было этого, читай внимательнее...)
Тёмный Эльф
теперь я вообще в ауте.. почему когда я с самого начала использовала функцию
Цитата
strcmp(s, p)
ничего не работало?? wacko.gif из-за rt? возможно..хм..
спасибо, volvo..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.