2015-10-27 3 views
-2

Я хочу ввести дату в этом формате 2/11/2015. как я могу это сделать, используя C++? Спасибо. Следующий метод не работает.Как взять ввод на той же строке в C++?

cin>>day >>month >>year ; 

, а также пользователь не должен нажимать войти.

мой код

#include <iostream> 
using namespace std; 

class Date 
{ 
private : 
    int day,month,year; 
    char slash; 
public : 
    void inputdate(void) 
    { 
     cout<<"Enter Date in Formate (day/month/year)"<<endl; 
     cin >> day >> slash >> month >> slash >> year; 
    } 
    void checkdate(void) 
    { 
     if (day<=0 || day>=32) 
     { 
      cout<<"Day is Wrong ! "<<endl; 
     } 
     if (month==2 && day>=29) 
     { 
      cout<<"February can have max 28 days !"<<endl; 
     } 
     if (month<=0 || month>=13) 
     { 
      cout<<"Month is wrong !"<<endl; 
     } 
     if (year<=1799 || year>=3000) 
     { 
      cout<<"Year is Wrong !"<<endl; 
     } 
     if ((month==4 || month==6 || month==9 || month==11)&&(day>30)) 
     { 
      cout<<"Day is wrong ! September ,April ,June and November can have maximum 30 days ."<<endl; 
     } 
    } 
    void showdate(void) 
    { 
     checkdate(); 
     cout<<"Date is : "<<day<<"/"<<month<<"/"<<year<<endl; 
    } 
}; 
+0

попробовать зсапЕ https://msdn.microsoft.com/en-us/library/aa272895(v=vs.60) .aspx – GreatAndPowerfulOz

+0

Я не понимаю этого. –

+0

'scanf ("% d /% d /% d ", & day, & month, & year)' или делать то, что предлагает @SteJ – GreatAndPowerfulOz

ответ

0

Вы можете использовать фиктивный char переменную для чтения за / сепаратора:

int day, month, year; 
char slash; // dummy to skip past the '/' 

cin >> day >> slash >> month >> slash >> year; 
+0

, но ... нажмите, чтобы нажать Enter, а вход не на одной строке! –

+0

@RAOHAMMAS Вам нужно только нажать Enter один раз в конце ввода. Затем все входные данные остаются в одной строке. – Galik

+0

NO .... я думаю, вам лучше проверить это снова .... Пользователь должен нажать enter после каждого входа! –

1

C++ по своей природе не понимают даты текста; вам нужно будет либо использовать библиотеку, которая предоставляет эту функцию, либо самостоятельно создать функцию для преобразования между текстовым форматом и внутренним целочисленным форматом (который обычно представляет собой число секунд или миллисекунд, в зависимости от платформы, так как «Эпоха» (00:00 1 января 1970 года)).

Для этого вам потребуется:

  • Соберите дату в виде одной строки или символьного массива
  • Отдельные даты в его учредительном день/месяц/год
  • Вычислить эту дату как количество секунд с момента появления Эпоха

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

+0

Я не знаю что вы пытаетесь сказать! –

+1

Вы не можете просто использовать 'cin << var1 << var2 << var3;' и ожидать, что компилятор узнает, что вы имеете дело с датой и что каждое значение разделяется символом '/'. Вам нужно будет прочитать всю дату как одну переменную (например, 'cin << mydate;'), а затем обработать эту строку, чтобы превратить ее в данные, которые вы можете использовать в своей программе. – SteJ

+0

вы имеете в виду, что ... введите дату ввода как строку! –

Смежные вопросы