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

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

С++ Изменение Времени, Ввод И Считывание С Двоеточиями...

  • Автор темы Chevalier
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

Chevalier

прога выполняет роль функции time в командной строке и должна работать точно также...
но у меня возникли проблемы не могу сделать ввод даты не через пробел а через : : ,
и так чтобы прога работала...
сейчас прога делает почти все
разве что зацикливается если ввести смсволы а не цифры (либо не зацикливается а думает что нет прав)
либо тупит если вместо /t ввести что то другое
Помогите поправить и дописать код
проблемные места пометил коментами

C++:
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <windows.h>
using namespace std;


int main (int argc, char* argv[]){
setlocale (LC_ALL, "rus");
SYSTEMTIME lt; 
GetLocalTime(&lt);

int i=0,b=0;
if (argv[1]==0){//argv играет роль time 



printf("Текущее время: %d:%d:%d,%d\n",lt.wHour,lt.wMinute,lt.wSecond,lt.wMilliseconds);
int hour,minutes,seconds,milliseconds;
//цикл, если введена команда time (argv[1]) то после вывода времени идет запрос на введение нового
while (i=1) {
printf("Введите новое время: ");
//тут идет ввод времени через пробел, нужно нахимичить ввод ввиде часы:минуты:секунды,миллисекунды
cin>>hour>>minutes>>seconds>>milliseconds;
//если часы минуты секунды или миллисекунды введены криво
//тут хорошо было бы вставить условие если введен символ то так же вывести "указано недопустимое время"
//однако прога либо зацикливается либо выдает что нету прав администратора... подскажите как реальзовать??
if ((hour>24)||(minutes>60)||(seconds>60)||(milliseconds>1000))	
{
printf ("Указано недопустимое время. \n");
i=0;

}
else {
lt.wHour = hour; 
lt.wMinute = minutes; 
lt.wSecond = seconds;
lt.wMilliseconds = milliseconds;
SetLocalTime(&lt);// если время введено правильно идет проверка на права, т.е.
// можно ли изменить время, если нельзя то выводится смска, если можно то меняет!
if (SetLocalTime (&lt)==0){
printf("Клиент не обладает требуемыми правами.\n");
i=1;
return 1;

}
}
}
return 1;
}



if (strcmp(argv[1],"/t")==0) // если в командной строке при вызове проги написать /t то выдается время
{
printf("%d:%d:%d\n",lt.wHour,lt.wMinute,lt.wSecond);
return 1;
}
else

if (strcmp(argv[1],"exit")!=0){
printf("\"%s\" не является внутренней или внешней\n командой, исполняемой программой или пакетным файлом.\n",argv[1]);}
else	
return 1;

return 0;
}
 
R

rrrFer

Код:
 //тут идет ввод времени через пробел, нужно нахимичить ввод ввиде часы:минуты:секунды,миллисекунды
cin>>hour>>minutes>>seconds>>milliseconds;

fill
Get/set the fill character (public member function)

fill character: character used to pad a field up to the field width. It can be obtained or modified by calling member function fill or parameterized manipulator setfill.
МБ поможет.
 
R

rrrFer

а нет, не поможет...

но вот такая функция точно поможет:
Код:
void get(std::istream& ist, char **str) {
char c;
int i;
for(i = 0; 0 == ist.eof(); ++i) {
c = ist.get();
if (':' == c) break;
(*str)[i] = c;
}
(*str)[i] = 0;
}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!