簡體   English   中英

C 語言:scanf 和 sscanf 表達式

[英]C language: scanf and sscanf expressions

我在 scanf 和 sscanf 參數中遇到過類似這樣的表達式:

sscanf(buffer, "%d,%100[^,]%*c%f", destination_pointer)

或者

scanf("\n%99s", destination);

解釋這些的正確方法是什么? 我知道“%s %c %d”之類的東西是什么,而且 %100 或通常的“%number”是要讀取的輸入的大小。 但是剩下的呢? 我能找到的只是基本的例子,沒有接近這個復雜的東西。 有參考指南嗎?

解釋這些的正確方法是什么?

sscanf(buffer, "%d,%100[^,]%*c%f", destination_pointer)

是無效調用。 有 3 個需要參數的轉換說明符 - %d%[]%f 這意味着在格式化字符串后正好需要 3 個參數,但只提供了一個destinantion_pointer

  • %d - 忽略任何空白字符,讀取以 10 為基數的int
  • , - 讀一個逗號
  • %100[^,] - 讀取最多 100 個不是逗號的字符。 目標緩沖區中最多存儲 101 個字節(100 個字符 + 空字節)。
    • %[set] - 讀取集合中的字符
    • %[^set] - 讀取不在集合中的字符
  • %*c - 忽略一個字符(逗號,因為%100[^,]一直讀到逗號,或者字符串結束,這將使scanf返回此處)。 注意 - 使用*忽略轉換結果會使scanf在讀取成功的情況下不會增加返回值。
  • %f - 忽略任何空白字符,讀取浮點數(任何格式 - 十進制、科學或十六進制)

scanf("\\n%99s", 目的地);

  • \\n - 讀取(並忽略)任意數量的空白字符(空白,表示任何內容isspace()返回非零值,因此空格、換頁、換行、回車、制表符或垂直制表符)
  • %99s - 忽略任何前導空白字符(它前面的\\n是無用的...),然后讀取最多 99 個不是空白的字符(結果緩沖區必須至少有 100 個字節長)。

暫無
暫無

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

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