2012-10-16 95 views
2

我使用scanf("%s", u);,因此我帶了一個字符串。我可以把人物qc-+/*%^=,和整數,但一切我想我的程序顯示錯誤消息。我怎麼知道它是否是任何其他字符,因爲如果他們放入除此之外的任何字符,它將進入if語句,該語句假定它是一個字符串中的整數,然後它等於0並破壞事物。C嘗試檢查無效輸入

回答

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

一種替代方法是隻是總是掃描一個字符串並循環通過它並檢查您想要的條件,如果它不通過,則發送錯誤消息,否則使用它。我相信這將是最簡單的方式,因爲輸入始終是字符。