Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ простенькая прога на запрос пароля

Автор: Тёмный Эльф 15.03.2007 4:59

Пароль хранится в текстовом документе, при вводе пароля пользователем прога сверяет его с тем ,что прописан в блокноте. Но странное дело, даже если вводишь правильный пароль, прога говорит, типа неверный пароль. Почему?

#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 15.03.2007 5:18

Ну, во-первых, все-таки открывать файл лучше вот так:

  pass = fopen("password.txt","rt");
(второй параметр задает режим - у меня записано открытие текст. файла для чтения), а во-вторых, если после пароля в файле есть перевод строки, то в s запишется "пароль\n", что естественно не будет равно паролю, введенному с клавиатуры... Поэтому перевод строки из файла надо убрать...

Автор: Тёмный Эльф 16.03.2007 3:22

Цитата
если после пароля в файле есть перевод строки, то в 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 16.03.2007 3:29

Файл с паролем прикрепи сюда (именно ПРИКРЕПИ, а не скопируй)...

Автор: Тёмный Эльф 16.03.2007 3:34

Я конечно прикреплю файл, но дело в том .что я тут же в программе вывожу значения 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 но почему??*/
}



Прикрепленные файлы
Прикрепленный файл  PASSWORD.TXT ( 8 байт ) Кол-во скачиваний: 209

Автор: Fanat 16.03.2007 3:37

Если не ошибаюсь у тебя пробел после password... smile.gif

Автор: Тёмный Эльф 16.03.2007 3:40

Цитата
Если не ошибаюсь у тебя пробел после password... smile.gif


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

Добавлено через 3 мин.
и вот еще доказательство того, что там нет пробела: когда прога выводит
printf(s); 
, то выводится "password" без всяких пробелов. вот. не знаю, в чем дело. =(

Автор: volvo 16.03.2007 3:52

Ну, и кто тебя учил СТРОКИ сравнивать через "==" ? blink.gif

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

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

(это, кстати, во-вторых... А во-первых, я понял, что ты НЕ читаешь того, что я пишу... Зачем же я пишу? Я что, где-то говорил, что надо открывать файл как
pass = fopen("password.txt","r");
? Не было этого, читай внимательнее...)

Автор: Тёмный Эльф 16.03.2007 4:04

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

Цитата
strcmp(s, p)
ничего не работало?? wacko.gif из-за rt? возможно..хм..
спасибо, volvo..