我需要在c編程中計算年齡然後如何在scanf上執行「用戶輸入過濾」。用戶輸入用c語言過濾就像避免字母和符號
main()
{
scanf("%d %d %d ,month,date, year);
--------;
printf("your age is"...);
}
這裏用戶可以輸入字母或一些符號如何過濾他們在C?
我需要在c編程中計算年齡然後如何在scanf上執行「用戶輸入過濾」。用戶輸入用c語言過濾就像避免字母和符號
main()
{
scanf("%d %d %d ,month,date, year);
--------;
printf("your age is"...);
}
這裏用戶可以輸入字母或一些符號如何過濾他們在C?
如果通過篩選,你的意思是刪除有問題的字符,你可以讀取緩衝區行和檢查它們,或者用一個快速的黑客就像這樣:
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');
}
thankx bro工作...想要投你的答案...但我不能 –
抱歉,我們仍然可以輸入值,如123213ew這就是接受沒有錯誤味精返回 –
好的解決了它.. scanf(「%d%* [^ 0 -9]%d%* [^ 0-9]%d%* [^ 0-9]「,&month,and day,&year); –
我不確定這是否是您要找的 - 您可以使用atoi
函數將用戶輸入轉換爲整數並檢查它們是否是有效整數。
但我們如何檢查將用戶輸入轉換爲整數後整數的有效性? –
@WifuWifu:你不能。你必須首先閱讀字符串,這樣如果它不是整數,你可以嘗試以不同的方式解析它。 –
你需要打破閱讀並轉換成2級獨立的步驟。 'fgets()'(不是'gets()',因爲它不可避免地創建了一個緩衝區溢出的機會)來讀入輸入,然後嘗試多次嘗試解析它,要麼通過查看單個字符,要麼使用'sscanf()'。但是這非常容易出錯,而且我肯定有一些庫用於解析更可靠的日期。 –