2017-03-26 26 views
1

目前我有它:如何去使用scanf函數讀取來自日期斜槓(/) - c

scanf("%d%d%d",&day1,&mon1,&year1); 

當我通過在這是要像一個日期也能正常工作

02-02-2016 

但是我希望它也被罰款,如果我有斜線,而不是短跑傳遞:

02/02/2016 

我已經試過這樣:

scanf("%d/%d/%d",&day1,&mon1,&year1); 

現在,這將接受斜槓(/),但卻不支持破折號( - )

它怎麼能同時接受???

我該怎麼做呢?我對這種語言很陌生,所以有些建議會很棒。在此先感謝

+0

這真的取決於你想要什麼人的輸入限制。你希望他們能夠在整數之間放置任何單個字符嗎?任何數量的字符?當你沒有明確什麼是允許的和什麼是不允許的時候,很難規定一種方法。 – jakeehoffmann

+0

我現在想要做的只是允許在整數之間接受短劃線和斜線。因此,我可以鍵入02-02-2016或02/02/2016 –

回答

1
char junk; 
scanf("%d%c%d%c%d", &day1, &junk, &mon1, &junk, &year1); 

這將工作。你不必對你正在閱讀的字符做任何事情。如果你想禁止任何不是-/,那麼你可以使用兩個變量來檢查這些字符,檢查它們是否是值你允許,然後printf("Invalid input")或反應,但你喜歡。

例,一直讀取輸入直到正確:

char delim1, delim2; 
do { 
    printf("Please enter date (dd-mm-yy or dd/mm/yy):"); 
    scanf("%d%c%d%c%d", &day1, &delim1, &mon1, &delim2, &year1); 
} while (delim1 != '-' && delim1 != '/' && delim2 != '-' && delim2 != '/'); 
+0

此方法可讓您訪問兩個分隔字符,因此您可以(例如)拒絕混合它們的輸入(_e.g._,5/9-2017或3-26/2018) –

+0

是的,好點(我沒有實際使用)。 – jakeehoffmann

+0

如果你不檢查兩個分隔符是否是相同的類型,你可以使用'scanf(「%u%* 1 [ - /]%u%* 1 [ - /]%u」,&uday1,&umon1,&uyear1 )'三個變量都是'unsigned int'類型。 –

2

您可以使用格式字符串,如:"%d%*[-/]%d%*[-/]%d"只接受破折號或數字之間的斜線,但扔掉任何性質是存在的。 (這是越來越到我的scanf知識的外部界限;我不認爲我曾經實際使用過這個功能。)

+0

這也適用。最後,這取決於你想成爲多麼有限。 – jakeehoffmann