Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2015, 17:16   #1
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию Проблема с GetTickCount

Дали задание на лабораторную Сделать программу разграничения доступа,замеряет скорость набора фразы на клавиатуре с использованием функции GetTickCount. То есть ввожу фразу,он записывает её в текстовый файл вместе количеством миллисекунд полученных с помощью функции GetTickCount После того как он запомнил её,предлагается снова ввести фразу с нужной скоростью клавиатуры.Если фраза и скорость ввода с клавиатуры совпадают то Вход выполнен,иначе Вход не выполнен.

Я получаю время затем вычисляю и округляю его до однозначного числа и после сравниваю с временем ввода фразы во 2-ой раз.И вывожу на экран значения для себя чтобы наглядно отслеживать и не заглядывать в текстовый файл каждый раз.

В этом пример даже при совпадении секунд он тоже не впускает.

Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string.h>
#include <string>
#include <cstdlib>
#include <windows.h>

using namespace std;

void zapisvfail()
{
    char phrase[100]="";
    DWORD startTime=GetTickCount();
    DWORD delta;
    cout<<"Введите фразу"<<endl;
	delta=GetTickCount()-startTime;
	delta=(delta*10)/1000;
	floor(delta);
    cin>>phrase;    
	cout<<delta<<endl;
    ofstream outfile("resultingfile.txt");
    outfile<<phrase;
    outfile<<delta;
}

void checking()
{
    DWORD startTime=GetTickCount();
    DWORD delta,delta1;
    char checkphrase[100]="";
    char phrase[100]="";
    ifstream infile("resultingfile.txt");
    infile>>phrase;
    infile>>delta;
    cout<<"Введите фразу:"<<endl;
	delta1=GetTickCount()-startTime;
	delta1=(delta1*10)/1000;
	floor(delta1);
    cin>>checkphrase;
	cout<<endl;	
	cout<<delta1<<endl;
    if((strcmp(phrase,checkphrase)==0) && (delta1==delta) )
        cout<<"Вход выполнен"<<endl;
    else cout<<"Вход не выполнен"<<endl;
}


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"Russian");
    zapisvfail();
    checking();
    system("pause");
	return 0;
}
Otar4ik вне форума Ответить с цитированием
Старый 29.11.2015, 17:57   #2
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Может дело не в delta и delta1, а phrase и checkphrase?
Попробуй опустить это условие и проверить результат.

Последний раз редактировалось chipside; 29.11.2015 в 18:07.
chipside вне форума Ответить с цитированием
Старый 29.11.2015, 18:25   #3
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Не помогает,Всё равно не пускает хотя время округляется и одинаково

Я конечно понимаю что всех достал

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

Последний раз редактировалось Stilet; 29.11.2015 в 18:59.
Otar4ik вне форума Ответить с цитированием
Старый 29.11.2015, 18:56   #4
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Не могу быть уверенным наверняка, но дело всё же, как мне кажется кроится в том, на что оканчиваются значения. Скажем, в одном есть '\0', во втором нет. Хотя я этого не утверждаю. А что, если не в файл записывать, а в структуру. Тут окончание массива должно быть одинаково.
chipside вне форума Ответить с цитированием
Старый 29.11.2015, 19:02   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Неудачная идея... и GetTickCount() тут ИМХО совсем не помошник. Он же не время, а такты исчисляет.
Тебе наверное нужны функции из http://www.cplusplus.com/reference/ctime/
Вот обрати внимание на эту: http://www.cplusplus.com/reference/ctime/difftime/
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.11.2015, 19:27   #6
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Неудачная идея... и GetTickCount() тут ИМХО совсем не помошник. Он же не время, а такты исчисляет.
Тебе наверное нужны функции из http://www.cplusplus.com/reference/ctime/
Вот обрати внимание на эту: http://www.cplusplus.com/reference/ctime/difftime/
К сожалению такое задание...применить эту функцию(

Разработать программу на языке высокого уровня типа Delphi, Borland C++ и др., которая обеспечивает разграничение доступа при её запуске.
Разграничение доступа выполняется с помощью замера скорости набора на клавиатуре одной и той же фразы. При первоначальной установке программы создаётся файл, куда будут записываться вычисленные значения статистических характеристик скорости ввода. При последующих запусках, программа предлагает ввести фразу, определяет характеристики скорости ввода и, в случае их совпадения с записанными в файле, разрешает работу программы.
Для вычисления скорости ввода используется API функция GetTickCount: DWORD.
Она не имеет параметров и возвращает число миллисекунд, прошедших от включения системы. С её помощью можно измерять число миллисекунд прошедших между нажатием двух клавиш.
Программа обязательно должна проверять и правильность ввода заданного текста. Сам текст для удобства набора должен отображаться на экране.
Otar4ik вне форума Ответить с цитированием
Старый 29.11.2015, 19:29   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Он же не время, а такты исчисляет.
Время он исчисляет, другое дело, насколько точно.
waleri вне форума Ответить с цитированием
Старый 29.11.2015, 19:57   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Время он исчисляет
Согласен. Малость перепутал ее с другим
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.11.2015, 21:31   #9
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

И как мне правильно его выводить,я округляю а он всё равно ни в какую
Otar4ik вне форума Ответить с цитированием
Старый 29.11.2015, 21:37   #10
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

А если при этом из DWORD партировать в стандартный int?
Скажем, промежуточные переменные.
Или задание это исключает?
---
Код:
#include <iostream>
#include <linux/cciss_ioctl.h>

using namespace std;

int main(void)
{
    DWORD a,b;

    a = 10325;
    b = 10317;

    int A,B;
    A = (a*10)/1000;
    B = (b*10)/1000;

    cout << A << ' ' << B << endl;

    if (A == B) cout << "Welcom\n";
    else cout << "Permission Denied\n";

    a *=10;
    a /= 1000;
    b *=10;
    b /= 1000;

    cout << a << ' ' << b << endl;
    if (a == b) cout << "Welcom\n";
    else cout << "Permission Denied\n";

    return 0;
}
У меня в обоих случаях вход подтвердился.

Последний раз редактировалось chipside; 29.11.2015 в 22:20.
chipside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GetTickCount и Sleep goluzov Общие вопросы C/C++ 1 18.10.2012 09:24
GetTickCount в Delphi 7 Лёхыч Помощь студентам 2 26.12.2010 15:07
GetTickCount в delphi Глупая_Девочка Помощь студентам 6 17.12.2010 18:43
Как использовать метод GetTickCount? fractal Общие вопросы .NET 1 25.02.2009 12:42
C# проблема с GetTickCount igroman Общие вопросы .NET 1 09.01.2009 09:37