簡體   English   中英

使用scanf()格式化輸入

[英]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節中, [轉換說明符下有一些句子解釋:

如果-字符在掃描列表中,並且不是第一個字符,也不是第二個字符(第一個字符是^),也不是最后一個字符,則該行為是實現定義的。

結果,我建議兩件事:

  1. 您不能依靠0-9代表掃描集中字符0123456789范圍。 您最好明確聲明0123456789
  2. 你的實現不解釋-因為你想它。

我建議是這樣的:

assert(scanf("%[- 0123456789]%*c", buffer) == 1);

需要檢查返回值。 如果scanf返回0或EOF ,那么您就不能期望使用buffer定義任何東西。 我將-放在掃描集的開頭,以便定義明確,並如前所述將您的0-9擴展為0123456789

希望對您有所幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM