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

Тема в разделе "C/C++/C#", создана пользователем Chevalier, 9 дек 2012.

Статус темы:
Закрыта.
  1. Chevalier

    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;
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
     //тут идет ввод времени через пробел, нужно нахимичить ввод ввиде часы:минуты:секунды,миллисекунды
    cin>>hour>>minutes>>seconds>>milliseconds;
    http://www.cplusplus.com/reference/istream/istream/
    МБ поможет.
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    а нет, не поможет...

    но вот такая функция точно поможет:
    Код (Text):
    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;
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей