2012-10-11 39 views
-1

我需要在c編程中計算年齡然後如何在scanf上執行「用戶輸入過濾」。用戶輸入用c語言過濾就像避免字母和符號

main() 
{ 
scanf("%d %d %d ,month,date, year); 
--------; 
printf("your age is"...); 
} 

這裏用戶可以輸入字母或一些符號如何過濾他們在C?

+0

你需要打破閱讀並轉換成2級獨立的步驟。 'fgets()'(不是'gets()',因爲它不可避免地創建了一個緩衝區溢出的機會)來讀入輸入,然後嘗試多次嘗試解析它,要麼通過查看單個字符,要麼使用'sscanf()'。但是這非常容易出錯,而且我肯定有一些庫用於解析更可靠的日期。 –

回答

3

如果通過篩選,你的意思是刪除有問題的字符,你可以讀取緩衝區行和檢查它們,或者用一個快速的黑客就像這樣:

scanf("%d%*[^0-9]%d%*[^0-9]%d", &month, &day, &year); 

其中*%後表示讀取和扔掉,括號內的^0-9表示任何不是0到9的字符。可能的錯誤:如果第一個字符不需要,scanf失敗。如果您在開始時放置了%*[^0-9],那麼以數字開頭輸入失敗。

另外,要求在發生故障的情況下,合適的輸入用戶(在以前的情況下,也應該檢查的scanf返回值):

while (scanf("%d %d %d", &month, &day, &year) != 3) 
{ 
    printf("bad input! Retry\n"); 
    /* possibly flush the line: */ 
    while (!feof(stdin) && fgetc(stdin) != '\n'); 
} 
+0

thankx bro工作...想要投你的答案...但我不能 –

+0

抱歉,我們仍然可以輸入值,如123213ew這就是接受沒有錯誤味精返回 –

+0

好的解決了它.. scanf(「%d%* [^ 0 -9]%d%* [^ 0-9]%d%* [^ 0-9]「,&month,and day,&year); –

0

我不確定這是否是您要找的 - 您可以使用atoi函數將用戶輸入轉換爲整數並檢查它們是否是有效整數。

+0

但我們如何檢查將用戶輸入轉換爲整數後整數的有效性? –

+0

@WifuWifu:你不能。你必須首先閱讀字符串,這樣如果它不是整數,你可以嘗試以不同的方式解析它。 –