2014-04-28 44 views
0

我正在嘗試創建一個頭文件,該頭文件從用戶獲取信息並在窗體中顯示信息。在輸入C++中顯示帶有前導零的日期

大多數情況下,我沒有問題,但是,我需要用戶以MMDDYYYY格式輸入他們的出生日期,然後將其轉換爲MM/DD/YYYY並將其顯示在表單中。

我的問題是,如果用戶輸入的月份'01 -09',顯示的東西遠不近正確。我仍然需要按照用戶輸入的確切方式顯示月份,因此它必須顯示爲(即01/01/1967)。

患者出生日期的變量稱爲int patientDateOfBirth。 此數據類型不能更改,它必須是int。

在我使用的頭文件的方法如下:

void PatientDemographicInformation::printPatientDateOfBirth() 
{ 
    int userMonth, userDay, userYear; 
    String birthDate = String(itoa(patientDateOfBirth)); 

    // Calculation to determine month, day, and year from the MMDDYYYY format. 
    userMonth = scanf ("%d", &userMonth); 
    // this was another method I used, however the leading zero messed it up. 
    // userMonth = patientDateOfBirth/1000000; 
    userDay = patientDateOfBirth/10000 % 100; 
    userYear = patientDateOfBirth % 10000; 

    cout << userMonth << "/"; 
    cout << setfill('0') << setw(2) << userDay << "/"; 
    cout << userYear; 
} 

而且,這是我第一次使用這個論壇,所以如果我的格式是關閉的,請原諒我。我對這種語言也沒有什麼經驗,所以如果答案很簡單,請在我身上輕鬆一下!

謝謝。

編輯:我剛剛注意到有變量String birthDate是不是在計算中使用。我不確定是否將int轉換爲String可以工作,但我無論如何都給了它一個鏡頭,但它不起作用,我忘記刪除該變量。但是,如果這可行,請讓我知道。

編輯:對不起,如果我不是很清楚,我希望是。我希望用戶以MMDDYYYY格式輸入出生日期,並將其輸出爲MM/DD/YYYY,這意味着我必須將月份,日期和年份分隔爲單獨的變量,然後將它們放入cout語句中。 我遇到的問題是,如果用戶把01到09作爲月份(i.e. 01141967), 當該方法試圖進行計算時,我會在輸出(i.e. 112230056/00004814/5599932)或類似的地方得到一些奇怪的數字。我完全被這種困境所困擾。我一直在搜尋試圖找到某種答案,我已經嘗試了幾種方法,都不起作用。

+0

請勿使用'scanf'。另外,我不太清楚期望的輸入和輸出是什麼,你能詳細說明一下嗎? – Massa

回答

1

您給出的印象是,您有一個patientDateOfBirth整數,其格式如下:mmddyyyymddyyyy,是否正確?如果是這樣,原始的

int month = patientDateOfBirth/1000000; 
int day = patientDateOfBirth/10000 % 100; 
int year = patientDateOfBirth % 10000; 

應該工作正常,無論在某些原始輸入上的前導零。另一種方法是使用C++ 11的<chrono>類或Boost的<boost/date_time.hpp>進行轉換...