我使用scanf("%s", u);
,因此我帶了一個字符串。我可以把人物q
,c
,-
,+
,/
,*
,%
,^
,=
,和整數,但一切我想我的程序顯示錯誤消息。我怎麼知道它是否是任何其他字符,因爲如果他們放入除此之外的任何字符,它將進入if語句,該語句假定它是一個字符串中的整數,然後它等於0並破壞事物。C嘗試檢查無效輸入
2
A
回答
2
您可以使用scanf格式說明符來確保它在遇到其中一個無效字符時停止接受輸入。 %[...]
它允許用戶指定的一組被存儲起來的字符(在字符數組可能 )。當不匹配 的字符匹配時轉換停止。例如,%[0-9]表示「通過九匹配所有數字 零」。並且%[AD-G34]表示「匹配A,D至G,3或 4」。
你可以告訴scanf()的通過將一個符號(^)直接%後[並與 集跟隨它,像這樣以匹配不在集 字符:%[^ AC],其意思是「匹配所有不是A到C的 」。
0
簡短的回答是,scanf()
是這個工作的錯誤工具。您應該考慮fgets()
(或來自POSIX 2008的相當於readline()
)。這將讀入整個記憶。然後您可以解析字符串,可能使用sscanf()
,可能是一些其他識別有效標記(一個或多個字符序列)和錯誤的「標記化」機制。
請參閱Why does this accept invalid input?的代碼,瞭解如何讀取每個輸入行的一個數字的示例。你想要適應你的目的;它現在不太合適,但它是數字解析的一個很好的起點。還要注意,atoi()
沒有錯誤檢測;它僅適用於非常良性的環境(例如您可能正在工作的那個環境)。
0
一種替代方法是隻是總是掃描一個字符串並循環通過它並檢查您想要的條件,如果它不通過,則發送錯誤消息,否則使用它。我相信這將是最簡單的方式,因爲輸入始終是字符。
相關問題
- 1. 檢查無效輸入
- 2. 檢查文本框的循環中的有效輸入或嘗試趕上c#
- 3. 無效嘗試
- 4. 輸入有效性檢查
- 5. 檢查有效輸入
- 6. C# - 方法無效檢查
- 7. 嘗試配置lambda藍圖時輸入無效iot-button-email
- 8. 批處理腳本:檢查是否有效或無效輸入
- 9. JNA - VM崩潰時嘗試進入C函數與無效* PARAM
- 10. 無法輸入arraylist,嘗試了一切
- 11. C++鍵輸入檢查
- 12. 檢測無效文件輸入,Python
- 13. 觸發器檢查有效輸入
- 14. 如何檢查輸入是否有效?
- 15. 檢查用戶輸入是否有效
- 16. Noflo嘗試打印輸入
- 17. 嘗試,除了和輸入
- 18. 嘗試檢查時出錯
- 19. 嘗試除錯誤檢查
- 20. 檢查登錄嘗試
- 21. 試圖循環切換一個無效輸入(C#)
- 22. 檢查輸入是有效的C++在做while while循環
- 23. C++檢查,如果用戶輸入一個有效的答案
- 24. 檢查命令行輸入是否爲有效整數(C)
- 25. 如何檢查輸入值是否在C++中有效值
- 26. C#檢查輸入是否有效日期
- 27. 使用jQuerys檢查輸入中的無效字符
- 28. 檢查用戶輸入的無效字符
- 29. 正則表達式來檢查無效輸入
- 30. 檢查輸入是否包含無效字符