[英]formatted input using scanf()
我需要將字符串作為輸入,舍棄不是空格,連字符或數字的形式。 換句話說,我只希望讀正和負整數。我對使用scanf並不感到困惑,但我更喜歡它。
到目前為止,我嘗試過的是:
char buffer[200];
scanf("%[0-9 ' ']*%c", buffer); /*this works perfectly, except the hyphen part*/
scanf("%[0-9 - ' ']%*c", buffer); /*no change*/
scanf("%[0-9 '-' ' ']%*c", buffer); /*still no change*/
顯然一次只能嘗試其中之一。
感謝您提供的任何見解或幫助。
我很驚訝這對您有用:
scanf("%[0-9 ' ']*%c", buffer);
^--- There's a typo, here. The * should probably be after the %.
在更緊迫的問題上...在C11標准的第7.2.1.6.2p12節中, [
轉換說明符下有一些句子解釋:
如果-字符在掃描列表中,並且不是第一個字符,也不是第二個字符(第一個字符是^),也不是最后一個字符,則該行為是實現定義的。
結果,我建議兩件事:
0-9
代表掃描集中字符0123456789
范圍。 您最好明確聲明0123456789
。 -
因為你想它。 我建議是這樣的:
assert(scanf("%[- 0123456789]%*c", buffer) == 1);
您需要檢查返回值。 如果scanf
返回0或EOF
,那么您就不能期望使用buffer
定義任何東西。 我將-
放在掃描集的開頭,以便定義明確,並如前所述將您的0-9
擴展為0123456789
。
希望對您有所幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.